Untitled

 avatar
unknown
plain_text
2 years ago
3.3 kB
10
Indexable
			namespace MV.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>();
				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();
				//}

				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.DeleteAsync<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...