Untitled
unknown
plain_text
3 years ago
3.4 kB
15
Indexable
[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>();
return Results.Ok(films);
#region
//List<FilmDTO>? films = freeOnly ?
//await _db.GetAsync<Film, FilmDTO>(f => f.Free.Equals(freeOnly)) :
//await _db.GetAsync<Film, FilmDTO>(); return Results.Ok(films);
#endregion
}
catch (Exception ex)
{
}
return Results.NotFound();
}
// GET api/<FilmsController>/5
[HttpGet("{id}")]
public async Task<IResult> Get(int id)
{
try
{
_db.Include<Genre>();
_db.Include<Director>();
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] FilmCreateDTO 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);
}
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");
//if (dto == null || dto.Id != id)
//{
// return Results.BadRequest();
//}
//Fråga Jonas vad denna gör? Varför är den annorlunda i DirectorsController?
var exists = await _db.AnyAsync<Director>(d => d.Id.Equals(dto.DirectorId));
if (!exists) return Results.NotFound("Could not find related entity");
exists = await _db.AnyAsync<Film>(f => f.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();
}
// DELETE api/<FilmsController>/5
[HttpDelete("{id}")]
public async Task <IResult> Delete(int id)
{
try {
var success = await _db.Delete<Film>(id);
if (!success) return Results.NotFound();
success = await _db.SaveChangesAsync();
if (!success) return Results.BadRequest();
return Results.NoContent();
}
catch (Exception ex) { }
return Results.BadRequest();
}
}Editor is loading...