Untitled

 avatar
unknown
plain_text
2 years ago
4.4 kB
4
Indexable
using FlFi.Common.DTOs;
using FlFI.Membership.Database.Entities;

// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860

namespace FlFi.Membership.API.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class FilmsController : ControllerBase
    {
        private readonly IDbService _db;
        public FilmsController(IDbService db) => _db = db;

        [HttpGet]
        public async Task<IResult> Get()
        {
            try
            {
                _db.Include<Director>();   //The Include method in this method appears to be a custom method
                                           //that includes related entities in the query to retrieve data from a database,
                                           //in this case the entity Director is being included. The result is then used
                                           //to populate a list of FilmDTO objects.

                List<FilmDTO>? films = await _db.GetAsync<Film, FilmDTO>();

                //List<FilmDTO>? films = freeOnly ?
                //await _db.GetAsync<Film, FilmDTO>(f => f.Free.Equals(freeOnly)) :
                //await _db.GetAsync<Film, FilmDTO>();

                return Results.Ok(films);

            }
            catch (Exception ex)
            {

            }
            return Results.NotFound();
        }

        // GET api/<FilmsController>/5
        [HttpGet("{id}")]
        public async Task<IResult> Get(int id)
        {
            try
            {
                _db.Include<Director>();
                _db.Include<Genre>();
                var film = await _db.SingleAsync<Film, FilmDTO>(f => f.Id.Equals(id));

                return Results.Ok(film);
            }
            catch (Exception ex)
            {
            }
            return Results.NotFound();
        }

        // POST api/<FilmsController>
        [HttpPost]
        public async Task<IResult> Post([FromBody] FilmEditDTO dto)
        {
            try
            {
                if (dto == null) return Results.BadRequest();

                var film = await _db.AddAsync<Film, FilmCreateDTO>(dto);

                var success = await _db.SaveChangesAsync();

                if (!success) return Results.BadRequest();

                return Results.Created(_db.GetURI<Film>(film), film);
            }

            catch (Exception ex)
            {

            }
            return Results.BadRequest();
        }

        // PUT api/<FilmsController>/5
        [HttpPut("{id}")]
        public async Task<IResult> Put(int id, [FromBody] FilmEditDTO dto)
        {
            try
            {
                if (dto == null) return Results.BadRequest("No entity provided");
                if (!id.Equals(dto.Id)) return Results.BadRequest("Differing ids");

                var exists = await _db.AnyAsync<Director>(i => i.Id.Equals(dto.DirectorId));  //Fråga JOnas om varför director här och director på Directorcontroller
                if (!exists) return Results.NotFound("Could not find related entity");

                exists = await _db.AnyAsync<Film>(c => c.Id.Equals(id));
                if (!exists) return Results.NotFound("Could not find entity");

                _db.Update<Film, FilmEditDTO>(dto.Id, dto);

                var success = await _db.SaveChangesAsync();

                if (!success) return Results.BadRequest();

                return Results.NoContent();
            }
            catch (Exception ex)
            {
            }
            return Results.BadRequest("Unable to update the entity");
        }

        //DELETE api/<FilmsController>/5
        [HttpDelete("{id}")]
        public async Task<IResult> Delete(int id)
        {
            try
            {
                var success = await _db.DeleteAsync<Film>(id);

                if (!success) return Results.NotFound();

                success = await _db.SaveChangesAsync();

                if (!success) return Results.BadRequest();

                return Results.NoContent();
            }
            catch
            {
            }

            return Results.BadRequest();
        }
    }
}
Editor is loading...