diff --git a/FichaBackend/Controllers/AdminController.cs b/FichaBackend/Controllers/AdminController.cs index c383522..eb4e428 100644 --- a/FichaBackend/Controllers/AdminController.cs +++ b/FichaBackend/Controllers/AdminController.cs @@ -1,4 +1,6 @@ -using Microsoft.AspNetCore.Mvc; +using FichaBackend.Models.DTO; +using FichaBackend.Services; +using Microsoft.AspNetCore.Mvc; namespace FichaBackend.Controllers; @@ -7,9 +9,61 @@ namespace FichaBackend.Controllers; public class AdminController : ControllerBase { private readonly ILogger _logger; + private readonly IPublicDataService _publicDataService; + private readonly IAdminService _adminService; - public AdminController(ILogger logger) + public AdminController(ILogger logger, IPublicDataService publicDataService, IAdminService adminService) { _logger = logger; + _publicDataService = publicDataService; + _adminService = adminService; } + + /// + /// Добавляет музей + /// + /// + /// + [HttpPost("AddMuseum")] + public async Task AddMuseum(MuseumDto museumDto) + { + await _adminService.AddMuseum(museumDto); + return Ok(); + } + + /// + /// Добавляет гида + /// + /// + /// + [HttpPost("AddGuide")] + public async Task AddGuide(GuideDto guideDto) + { + await _adminService.AddGuidePerson(guideDto); + return Ok(); + } + + // GET + + /// + /// Получаем всех гидов + /// + /// + [HttpGet("GetAllGuides")] + public async Task GetAllGuides() + { + return Ok(await _publicDataService.GetAllGuides()); + } + + /// + /// Получаем все музеи + /// + /// + [HttpGet("GetAllMuseum")] + public async Task GetAllMuseum() + { + return Ok(await _publicDataService.GetAllMuseum()); + } + + } \ No newline at end of file diff --git a/FichaBackend/Controllers/MainController.cs b/FichaBackend/Controllers/MainController.cs index 6b47e77..4c150b6 100644 --- a/FichaBackend/Controllers/MainController.cs +++ b/FichaBackend/Controllers/MainController.cs @@ -1,4 +1,5 @@ using FichaBackend.Models; +using FichaBackend.Models.DTO; using FichaBackend.Services; using Microsoft.AspNetCore.Mvc; @@ -24,12 +25,20 @@ public class MainController : ControllerBase return await _publicDataService.GetAllCity(); } + /// + /// Получаем карточки с вопросами + /// + /// [HttpGet("GetAllCards")] public async Task> GetAllCards() { return await _publicDataService.GetAllCards(); } + /// + /// Получаем все фильмы в городе по пушкинской карте + /// + /// [HttpGet("GetAllFilmsInCity/{cityName}")] public async Task>> GetAllFilmsInCityWithPuskinCard(string cityName) { @@ -39,13 +48,30 @@ public class MainController : ControllerBase return Ok(await _publicDataService.GetAllFilmsInCity(cityName)); } - [HttpGet("GetAllMuseumsInCity/{cityName}")] - public async Task>> GetAllMuseumsInCity(string cityName) + /// + /// Получаем всех гидов, которые работают в определённом городе + /// + /// + [HttpGet("GetAllGuides/{cityName}")] + public async Task GetAllGuides(string cityName) { - if (!_publicDataService.CityExsist(cityName)) + if(!_publicDataService.CityExsist(cityName)) return BadRequest("City does not exsist"); - - return Ok(await _publicDataService.GetAllMuseumsInCity(cityName)); + + return Ok(await _publicDataService.GetAllGuides(cityName)); + } + + /// + /// Получаем все музеи из одного города + /// + /// + [HttpGet("GetAllMuseum/{cityName}")] + public async Task GetAllMuseumFromCity(string cityName) + { + if(!_publicDataService.CityExsist(cityName)) + return BadRequest("City does not exsist"); + + return Ok(await _publicDataService.GetAllMuseum(cityName)); } } \ No newline at end of file diff --git a/FichaBackend/Controllers/ParserController.cs b/FichaBackend/Controllers/ParserController.cs index 8999716..16c7eed 100644 --- a/FichaBackend/Controllers/ParserController.cs +++ b/FichaBackend/Controllers/ParserController.cs @@ -1,4 +1,4 @@ -using FichaBackend.Models; +using FichaBackend.Models.DTO; using FichaBackend.Services; using Microsoft.AspNetCore.Mvc; @@ -17,6 +17,11 @@ public class ParserController : ControllerBase _publicDataService = publicDataService; } + /// + /// Удаляет старые фильмы во всём городе и добавляет новые + /// + /// + /// [HttpPost("UpdateFilms")] public async Task UpdateFilmsInCity(List films) { diff --git a/FichaBackend/DatabaseContext.cs b/FichaBackend/DatabaseContext.cs index 2ce1d12..8310569 100644 --- a/FichaBackend/DatabaseContext.cs +++ b/FichaBackend/DatabaseContext.cs @@ -9,6 +9,7 @@ namespace FichaBackend public DbSet Films { get; set; } = null!; public DbSet CardQuestions { get; set; } = null!; public DbSet Museums { get; set; } = null!; + public DbSet Guides { get; set; } = null!; protected override void OnModelCreating(ModelBuilder modelBuilder) { diff --git a/FichaBackend/FichaBackend.csproj b/FichaBackend/FichaBackend.csproj index 34f193d..cafb34f 100644 --- a/FichaBackend/FichaBackend.csproj +++ b/FichaBackend/FichaBackend.csproj @@ -35,6 +35,7 @@ .dockerignore + diff --git a/FichaBackend/Models/FilmDto.cs b/FichaBackend/Models/DTO/FilmDto.cs similarity index 89% rename from FichaBackend/Models/FilmDto.cs rename to FichaBackend/Models/DTO/FilmDto.cs index 44c2473..4a4cbbb 100644 --- a/FichaBackend/Models/FilmDto.cs +++ b/FichaBackend/Models/DTO/FilmDto.cs @@ -1,4 +1,4 @@ -namespace FichaBackend.Models; +namespace FichaBackend.Models.DTO; public class FilmDto { diff --git a/FichaBackend/Models/DTO/GuideDto.cs b/FichaBackend/Models/DTO/GuideDto.cs new file mode 100644 index 0000000..533618b --- /dev/null +++ b/FichaBackend/Models/DTO/GuideDto.cs @@ -0,0 +1,10 @@ +namespace FichaBackend.Models.DTO; + +public class GuideDto +{ + public IEnumerable City { get; set; } + public string FullName { get; set; } + public string PhoneNumber { get; set; } + public string? ContactUrl { get; set; } + public float Rating { get; set; } = 0; +} \ No newline at end of file diff --git a/FichaBackend/Models/MuseumDto.cs b/FichaBackend/Models/DTO/MuseumDto.cs similarity index 78% rename from FichaBackend/Models/MuseumDto.cs rename to FichaBackend/Models/DTO/MuseumDto.cs index 92bc6e4..b839654 100644 --- a/FichaBackend/Models/MuseumDto.cs +++ b/FichaBackend/Models/DTO/MuseumDto.cs @@ -1,12 +1,13 @@ using System.ComponentModel.DataAnnotations; -namespace FichaBackend.Models; +namespace FichaBackend.Models.DTO; public class MuseumDto { [Key] public string City { get; set; } public string Name { get; set; } + public string? Address { get; set; } public double Longtitude { get; set; } public double Latitude { get; set; } public float? Price { get; set; } diff --git a/FichaBackend/Models/Guide.cs b/FichaBackend/Models/Guide.cs new file mode 100644 index 0000000..b22b46c --- /dev/null +++ b/FichaBackend/Models/Guide.cs @@ -0,0 +1,14 @@ +using System.ComponentModel.DataAnnotations; + +namespace FichaBackend.Models; + +public class Guide +{ + [Key] + public long Id { get; set; } + public IEnumerable City { get; set; } + public string FullName { get; set; } + public string PhoneNumber { get; set; } + public string? ContactUrl { get; set; } + public float Rating { get; set; } = 0; +} \ No newline at end of file diff --git a/FichaBackend/Models/Museum.cs b/FichaBackend/Models/Museum.cs index 2963d2e..9b7138f 100644 --- a/FichaBackend/Models/Museum.cs +++ b/FichaBackend/Models/Museum.cs @@ -8,6 +8,7 @@ public class Museum public long Id { get; set; } public City City { get; set; } public string Name { get; set; } + public string? Address { get; set; } public double Longtitude { get; set; } public double Latitude { get; set; } public float? Price { get; set; } diff --git a/FichaBackend/Program.cs b/FichaBackend/Program.cs index 0f75c2f..3384887 100644 --- a/FichaBackend/Program.cs +++ b/FichaBackend/Program.cs @@ -44,6 +44,7 @@ builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); // Services builder.Services.AddScoped(); +builder.Services.AddScoped(); // cors builder.Services.AddCors(options => diff --git a/FichaBackend/Services/IAdminService.cs b/FichaBackend/Services/IAdminService.cs new file mode 100644 index 0000000..10c1370 --- /dev/null +++ b/FichaBackend/Services/IAdminService.cs @@ -0,0 +1,61 @@ +using AutoMapper; +using FichaBackend.Models; +using FichaBackend.Models.DTO; +using Microsoft.EntityFrameworkCore; + +namespace FichaBackend.Services; + +public interface IAdminService +{ + public Task AddMuseum(MuseumDto museumDto); + public Task AddGuidePerson(GuideDto guideDto); +} + +public class AdminService : IAdminService +{ + private readonly DatabaseContext _databaseContext; + private readonly IMapper _mapper; + + public AdminService(DatabaseContext databaseContext, IMapper mapper) + { + _databaseContext = databaseContext; + _mapper = mapper; + } + + public async Task AddMuseum(MuseumDto museumDto) + { + Museum m = new(); + m.Name = museumDto.Name; + City c = await _databaseContext.Cities.FirstOrDefaultAsync(x => x.Name.ToLower() == museumDto.City.ToLower()); + if (c==null) + return; + m.City = c; + m.Price = museumDto.Price; + m.Latitude = museumDto.Latitude; + m.Longtitude = museumDto.Longtitude; + m.Address = museumDto.Address; + await _databaseContext.Museums.AddAsync(m); + await _databaseContext.SaveChangesAsync(); + } + + public async Task AddGuidePerson(GuideDto guideDto) + { + Guide g = new(); + g.City = new List(); + foreach (var city in guideDto.City) + { + var c = await _databaseContext.Cities.FirstOrDefaultAsync(x => x.Name.ToLower() == city.ToLower()); + if (c==null) + return $"City {city} not exist"; + g.City.Append(c); + } + g.Rating = guideDto.Rating; + g.PhoneNumber = guideDto.PhoneNumber; + g.ContactUrl = guideDto.ContactUrl; + g.FullName = guideDto.FullName; + + await _databaseContext.Guides.AddAsync(g); + await _databaseContext.SaveChangesAsync(); + return "OK"; + } +} \ No newline at end of file diff --git a/FichaBackend/Services/IPublicDataService.cs b/FichaBackend/Services/IPublicDataService.cs index 41b8092..e309698 100644 --- a/FichaBackend/Services/IPublicDataService.cs +++ b/FichaBackend/Services/IPublicDataService.cs @@ -1,5 +1,6 @@ using AutoMapper; using FichaBackend.Models; +using FichaBackend.Models.DTO; using Microsoft.EntityFrameworkCore; namespace FichaBackend.Services; @@ -12,6 +13,8 @@ public interface IPublicDataService public Task> GetAllMuseumsInCity(string cityName); public Task UpdateFilmsInCity(IEnumerable films); public bool CityExsist(string cityName); + public Task> GetAllMuseum(string cityName = ""); + public Task> GetAllGuides(string cityName = ""); } public class PublicDataService : IPublicDataService @@ -72,4 +75,18 @@ public class PublicDataService : IPublicDataService { return _databaseContext.Cities.Any(x => x.Name.ToLower() == cityName.ToLower()); } + + public async Task> GetAllMuseum(string cityName = "") + { + IEnumerable museum = cityName == "" ? await _databaseContext.Museums.ToListAsync() : + _databaseContext.Museums.Where(x => x.City.Name.ToLower() == cityName.ToLower()); + return _mapper.Map, IEnumerable>(museum); + } + + public async Task> GetAllGuides(string cityName = "") + { + IEnumerable guides = cityName == "" ? await _databaseContext.Guides.ToListAsync() : + _databaseContext.Guides.Where(x => x.City.Any(y => y.Name.ToLower() == cityName.ToLower())); + return _mapper.Map, IEnumerable>(guides); + } } \ No newline at end of file diff --git a/FichaBackend/Utils/MappingProfiles.cs b/FichaBackend/Utils/MappingProfiles.cs index fb0dc31..7d7ba30 100644 --- a/FichaBackend/Utils/MappingProfiles.cs +++ b/FichaBackend/Utils/MappingProfiles.cs @@ -1,5 +1,6 @@ using AutoMapper; using FichaBackend.Models; +using FichaBackend.Models.DTO; namespace FichaBackend.Utils; @@ -11,5 +12,7 @@ public class MappingProfiles : Profile CreateMap(); CreateMap(); CreateMap(); + CreateMap(); + CreateMap(); } } \ No newline at end of file