Добавил подключение парсера
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 01:14:15 +03:00
parent 21461cc298
commit 02459d03f8
Signed by: serega404
GPG Key ID: B6AD49C8C835460C
10 changed files with 156 additions and 4 deletions

View File

@ -0,0 +1,15 @@
using Microsoft.AspNetCore.Mvc;
namespace FichaBackend.Controllers;
[ApiController]
[Route("v1/admin")]
public class AdminController : ControllerBase
{
private readonly ILogger<MainController> _logger;
public AdminController(ILogger<MainController> logger)
{
_logger = logger;
}
}

View File

@ -1,17 +1,31 @@
using Microsoft.AspNetCore.Mvc;
using FichaBackend.Models;
using FichaBackend.Services;
using Microsoft.AspNetCore.Mvc;
namespace FichaBackend.Controllers;
[ApiController]
[Route("[controller]")]
[Route("v1/")]
public class MainController : ControllerBase
{
private readonly ILogger<MainController> _logger;
private readonly IPublicDataService _publicDataService;
public MainController(ILogger<MainController> logger)
public MainController(ILogger<MainController> logger, IPublicDataService publicDataService)
{
_logger = logger;
_publicDataService = publicDataService;
}
public async Task<IEnumerable<City>> GetAllCity()
{
return await _publicDataService.GetAllCity();
}
public async Task<IEnumerable<Film>> GetAllMoviesInCityWithPuskinCard(string cityName)
{
return await _publicDataService.GetAllFilmsInCity(cityName);
}
}

View File

@ -0,0 +1,30 @@
using FichaBackend.Models;
using FichaBackend.Services;
using Microsoft.AspNetCore.Mvc;
namespace FichaBackend.Controllers;
[ApiController]
[Route("v1/parser")]
public class ParserController : ControllerBase
{
private readonly ILogger<MainController> _logger;
private readonly IPublicDataService _publicDataService;
public ParserController(ILogger<MainController> logger, IPublicDataService publicDataService)
{
_logger = logger;
_publicDataService = publicDataService;
}
[HttpPost("UpdateFilms")]
public async Task<ActionResult> UpdateFilmsInCity(List<FilmDto> films)
{
var val = films.First().City;
if (films.Any(x => x.City != val))
return BadRequest("All films must be in the same city");
await _publicDataService.UpdateFilmsInCity(films);
return Ok("Films updated");
}
}

View File

@ -1,9 +1,12 @@
using Microsoft.EntityFrameworkCore;
using FichaBackend.Models;
using Microsoft.EntityFrameworkCore;
namespace FichaBackend
{
public class DatabaseContext : DbContext
{
public DbSet<City> Cities { get; set; } = null!;
public DbSet<Film> Films { get; set; } = null!;
protected override void OnModelCreating(ModelBuilder modelBuilder)
{

View File

@ -35,4 +35,6 @@
</Content>
</ItemGroup>
</Project>

View File

@ -0,0 +1,11 @@
using System.ComponentModel.DataAnnotations;
namespace FichaBackend.Models;
public class City
{
[Key]
public long Id { get; set; }
public string Name { get; set; }
public string ImageURL { get; set; }
}

View File

@ -0,0 +1,15 @@
using System.ComponentModel.DataAnnotations;
namespace FichaBackend.Models;
public class Film
{
[Key]
public long Id { get; set; }
public string FilmName { get; set; }
public string Cinema { get; set; }
public string Genre { get; set; }
public string Time { get; set; }
public float Price { get; set; }
public City City { get; set; }
}

View File

@ -0,0 +1,11 @@
namespace FichaBackend.Models;
public class FilmDto
{
public string City { get; set; }
public string Cinema { get; set; }
public string FilmName { get; set; }
public string? Genre { get; set; }
public string? Time { get; set; }
public float? Price { get; set; }
}

View File

@ -1,4 +1,5 @@
using FichaBackend;
using FichaBackend.Services;
using Microsoft.EntityFrameworkCore;
using Microsoft.OpenApi.Models;
@ -39,6 +40,8 @@ builder.Services.AddHealthChecks()
.AddNpgSql(dbConString);
// Services
builder.Services.AddScoped<IPublicDataService, PublicDataService>();
// cors
builder.Services.AddCors(options =>
{

View File

@ -0,0 +1,48 @@
using FichaBackend.Models;
using Microsoft.EntityFrameworkCore;
namespace FichaBackend.Services;
public interface IPublicDataService
{
public Task<IEnumerable<City>> GetAllCity();
public Task<IEnumerable<Film>> GetAllFilmsInCity(string cityName);
public Task UpdateFilmsInCity(IEnumerable<FilmDto> films);
}
public class PublicDataService : IPublicDataService
{
private readonly DatabaseContext _databaseContext;
public PublicDataService(DatabaseContext databaseContext)
{
_databaseContext = databaseContext;
}
public async Task<IEnumerable<City>> GetAllCity()
{
return await _databaseContext.Cities.ToListAsync();
}
public async Task<IEnumerable<Film>> GetAllFilmsInCity(string cityName)
{
return await _databaseContext.Films.ToListAsync();
}
public async Task UpdateFilmsInCity(IEnumerable<FilmDto> films)
{
await _databaseContext.Films.Where(x => x.City.Name == films.First().City).ForEachAsync(x => _databaseContext.Films.Remove(x));
foreach (var filmDto in films)
{
var film = new Film();
film.FilmName = filmDto.FilmName;
film.Cinema = filmDto.Cinema;
film.Price = filmDto.Price ?? 0;
film.City = await _databaseContext.Cities.FirstOrDefaultAsync(x => x.Name == filmDto.City);
await _databaseContext.Films.AddAsync(film);
}
await _databaseContext.SaveChangesAsync();
}
}