Добавил гидов и музеи
All checks were successful
Create and publish a Docker image / Publish image (push) Successful in 24s
Create and publish a Docker image / Deploy image (push) Successful in 3s

This commit is contained in:
Sergey Karmanov 2023-08-25 17:50:28 +03:00
parent 577fa15fd7
commit 53661c3b55
Signed by: serega404
GPG Key ID: B6AD49C8C835460C
14 changed files with 205 additions and 10 deletions

View File

@ -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<MainController> _logger;
private readonly IPublicDataService _publicDataService;
private readonly IAdminService _adminService;
public AdminController(ILogger<MainController> logger)
public AdminController(ILogger<MainController> logger, IPublicDataService publicDataService, IAdminService adminService)
{
_logger = logger;
_publicDataService = publicDataService;
_adminService = adminService;
}
/// <summary>
/// Добавляет музей
/// </summary>
/// <param name="museumDto"></param>
/// <returns></returns>
[HttpPost("AddMuseum")]
public async Task<ActionResult> AddMuseum(MuseumDto museumDto)
{
await _adminService.AddMuseum(museumDto);
return Ok();
}
/// <summary>
/// Добавляет гида
/// </summary>
/// <param name="guideDto"></param>
/// <returns></returns>
[HttpPost("AddGuide")]
public async Task<ActionResult> AddGuide(GuideDto guideDto)
{
await _adminService.AddGuidePerson(guideDto);
return Ok();
}
// GET
/// <summary>
/// Получаем всех гидов
/// </summary>
/// <returns></returns>
[HttpGet("GetAllGuides")]
public async Task<ActionResult> GetAllGuides()
{
return Ok(await _publicDataService.GetAllGuides());
}
/// <summary>
/// Получаем все музеи
/// </summary>
/// <returns></returns>
[HttpGet("GetAllMuseum")]
public async Task<ActionResult> GetAllMuseum()
{
return Ok(await _publicDataService.GetAllMuseum());
}
}

View File

@ -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();
}
/// <summary>
/// Получаем карточки с вопросами
/// </summary>
/// <returns></returns>
[HttpGet("GetAllCards")]
public async Task<IEnumerable<CardQuestion>> GetAllCards()
{
return await _publicDataService.GetAllCards();
}
/// <summary>
/// Получаем все фильмы в городе по пушкинской карте
/// </summary>
/// <returns></returns>
[HttpGet("GetAllFilmsInCity/{cityName}")]
public async Task<ActionResult<IEnumerable<FilmDto>>> GetAllFilmsInCityWithPuskinCard(string cityName)
{
@ -39,13 +48,30 @@ public class MainController : ControllerBase
return Ok(await _publicDataService.GetAllFilmsInCity(cityName));
}
[HttpGet("GetAllMuseumsInCity/{cityName}")]
public async Task<ActionResult<IEnumerable<Museum>>> GetAllMuseumsInCity(string cityName)
/// <summary>
/// Получаем всех гидов, которые работают в определённом городе
/// </summary>
/// <returns></returns>
[HttpGet("GetAllGuides/{cityName}")]
public async Task<ActionResult> 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));
}
/// <summary>
/// Получаем все музеи из одного города
/// </summary>
/// <returns></returns>
[HttpGet("GetAllMuseum/{cityName}")]
public async Task<ActionResult> GetAllMuseumFromCity(string cityName)
{
if(!_publicDataService.CityExsist(cityName))
return BadRequest("City does not exsist");
return Ok(await _publicDataService.GetAllMuseum(cityName));
}
}

View File

@ -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;
}
/// <summary>
/// Удаляет старые фильмы во всём городе и добавляет новые
/// </summary>
/// <param name="films"></param>
/// <returns></returns>
[HttpPost("UpdateFilms")]
public async Task<ActionResult> UpdateFilmsInCity(List<FilmDto> films)
{

View File

@ -9,6 +9,7 @@ namespace FichaBackend
public DbSet<Film> Films { get; set; } = null!;
public DbSet<CardQuestion> CardQuestions { get; set; } = null!;
public DbSet<Museum> Museums { get; set; } = null!;
public DbSet<Guide> Guides { get; set; } = null!;
protected override void OnModelCreating(ModelBuilder modelBuilder)
{

View File

@ -35,6 +35,7 @@
<Content Include="..\.dockerignore">
<Link>.dockerignore</Link>
</Content>
</ItemGroup>

View File

@ -1,4 +1,4 @@
namespace FichaBackend.Models;
namespace FichaBackend.Models.DTO;
public class FilmDto
{

View File

@ -0,0 +1,10 @@
namespace FichaBackend.Models.DTO;
public class GuideDto
{
public IEnumerable<string> City { get; set; }
public string FullName { get; set; }
public string PhoneNumber { get; set; }
public string? ContactUrl { get; set; }
public float Rating { get; set; } = 0;
}

View File

@ -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; }

View File

@ -0,0 +1,14 @@
using System.ComponentModel.DataAnnotations;
namespace FichaBackend.Models;
public class Guide
{
[Key]
public long Id { get; set; }
public IEnumerable<City> City { get; set; }
public string FullName { get; set; }
public string PhoneNumber { get; set; }
public string? ContactUrl { get; set; }
public float Rating { get; set; } = 0;
}

View File

@ -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; }

View File

@ -44,6 +44,7 @@ builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
// Services
builder.Services.AddScoped<IPublicDataService, PublicDataService>();
builder.Services.AddScoped<IAdminService, AdminService>();
// cors
builder.Services.AddCors(options =>

View File

@ -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<string> 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<string> AddGuidePerson(GuideDto guideDto)
{
Guide g = new();
g.City = new List<City>();
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";
}
}

View File

@ -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<IEnumerable<Museum>> GetAllMuseumsInCity(string cityName);
public Task UpdateFilmsInCity(IEnumerable<FilmDto> films);
public bool CityExsist(string cityName);
public Task<IEnumerable<MuseumDto>> GetAllMuseum(string cityName = "");
public Task<IEnumerable<GuideDto>> 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<IEnumerable<MuseumDto>> GetAllMuseum(string cityName = "")
{
IEnumerable<Museum> museum = cityName == "" ? await _databaseContext.Museums.ToListAsync() :
_databaseContext.Museums.Where(x => x.City.Name.ToLower() == cityName.ToLower());
return _mapper.Map<IEnumerable<Museum>, IEnumerable<MuseumDto>>(museum);
}
public async Task<IEnumerable<GuideDto>> GetAllGuides(string cityName = "")
{
IEnumerable<Guide> guides = cityName == "" ? await _databaseContext.Guides.ToListAsync() :
_databaseContext.Guides.Where(x => x.City.Any(y => y.Name.ToLower() == cityName.ToLower()));
return _mapper.Map<IEnumerable<Guide>, IEnumerable<GuideDto>>(guides);
}
}

View File

@ -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<Film, FilmDto>();
CreateMap<Museum, MuseumDto>();
CreateMap<MuseumDto, Museum>();
CreateMap<Guide, GuideDto>();
CreateMap<GuideDto, Guide>();
}
}