Reward model, viewmodel, controller & AppDbContext (latest working v1.0 after changes)
Wed Jul 03 2024 23:37:06 GMT+0000 (Coordinated Universal Time)
Saved by @iamkatmakhafola
//Models public class Reward { [Key] public int Reward_ID { get; set; } [Required] public DateTime Reward_Issue_Date { get; set; } public bool IsPosted { get; set; } // New property to track posted status public int Reward_Type_ID { get; set; } [ForeignKey(nameof(Reward_Type_ID))] public Reward_Type Reward_Type { get; set; } } public class Reward_Member { [Key] public int Reward_Member_ID { get; set; } public bool IsRedeemed { get; set; } // New property to track redemption status public int Member_ID { get; set; } [ForeignKey(nameof(Member_ID))] public Member Member { get; set; } public int Reward_ID { get; set; } [ForeignKey(nameof(Reward_ID))] public Reward Reward { get; set; } } //ViewModels public class RewardRedeemViewModel { public int MemberId { get; set; } public int RewardId { get; set; } } public class RewardSetViewModel { public DateTime Reward_Issue_Date { get; set; } public int Reward_Type_ID { get; set; } public bool IsPosted { get; set; } = false; } public class RewardPostViewModel { public int RewardId { get; set; } } //Controller [Route("api/[controller]")] [ApiController] public class RewardController : ControllerBase { private readonly AppDbContext _appDbContext; public RewardController(AppDbContext appDbContext) { _appDbContext = appDbContext; } [HttpGet] [Route("getRewardById/{id}")] public async Task<IActionResult> GetRewardById(int id) { try { var reward = await _appDbContext.Rewards.FindAsync(id); if (reward == null) { return NotFound(); } return Ok(reward); } catch (Exception) { return BadRequest(); } } [HttpGet] [Route("getAllRewards")] public async Task<IActionResult> GetAllRewards() { try { var rewards = await _appDbContext.Rewards.ToListAsync(); return Ok(rewards); } catch (Exception) { return BadRequest(); } } [HttpPost] [Route("redeemReward")] public async Task<IActionResult> RedeemReward([FromBody] RewardRedeemViewModel request) { try { // Fetch the reward by ID var reward = await _appDbContext.Reward_Members .FirstOrDefaultAsync(r => r.Reward_ID == request.RewardId && r.Member_ID == request.MemberId); if (reward == null) { return NotFound("Reward not found or not eligible for the member."); } // Check if the reward is already redeemed if (reward.IsRedeemed) { return BadRequest("Reward is already redeemed."); } // Mark the reward as redeemed reward.IsRedeemed = true; _appDbContext.Entry(reward).State = EntityState.Modified; await _appDbContext.SaveChangesAsync(); return Ok(new { Status = "Success", Message = "Reward redeemed successfully!" }); } catch (Exception) { return BadRequest("An error occurred while redeeming the reward."); } } [HttpPost] [Route("setReward")] public async Task<IActionResult> SetReward(RewardSetViewModel r) { try { var reward = new Reward { Reward_Issue_Date = r.Reward_Issue_Date, Reward_Type_ID = r.Reward_Type_ID, IsPosted = r.IsPosted }; _appDbContext.Rewards.Add(reward); await _appDbContext.SaveChangesAsync(); return CreatedAtAction(nameof(GetRewardById), new { id = reward.Reward_ID }, reward); } catch (Exception) { return BadRequest(); } } [HttpPost] [Route("postReward")] public async Task<IActionResult> PostReward([FromBody] RewardPostViewModel request) { try { // Fetch the reward by ID var reward = await _appDbContext.Rewards .FirstOrDefaultAsync(r => r.Reward_ID == request.RewardId); if (reward == null) { return NotFound("Reward not found."); } // Check if the reward is already posted if (reward.IsPosted) { return BadRequest("Reward is already posted."); } // Mark the reward as posted reward.IsPosted = true; _appDbContext.Entry(reward).State = EntityState.Modified; await _appDbContext.SaveChangesAsync(); return Ok(new { Status = "Success", Message = "Reward posted successfully!" }); } catch (Exception) { return BadRequest("An error occurred while posting the reward."); } } } //AppDbContext var Rewards = new Reward[] { new Reward { Reward_ID = 1, IsPosted = false, Reward_Issue_Date = new DateTime(2024, 4, 10), Reward_Type_ID = 1 } }; builder.Entity<Reward>().HasData(Rewards); var Reward_Members = new Reward_Member[] { new Reward_Member{ Reward_Member_ID = 1, IsRedeemed = false, Member_ID = 1, Reward_ID = 1} }; builder.Entity<Reward_Member>().HasData(Reward_Members);
Comments