From d93066c6caea877b7a56570ea8c56f0bae327d9d Mon Sep 17 00:00:00 2001 From: Annika Date: Mon, 1 Aug 2022 10:50:04 -0600 Subject: [PATCH] keep crud methods complete --- keepr/Controllers/KeepsController.cs | 51 +++++++++++++++++++++++++++ keepr/Repositories/KeepsRepository.cs | 44 +++++++++++++++++++++++ keepr/Services/KeepsService.cs | 30 ++++++++++++++++ keepr/dbSetup.sql | 12 ++++++- 4 files changed, 136 insertions(+), 1 deletion(-) diff --git a/keepr/Controllers/KeepsController.cs b/keepr/Controllers/KeepsController.cs index 99d5ed6..943cdba 100644 --- a/keepr/Controllers/KeepsController.cs +++ b/keepr/Controllers/KeepsController.cs @@ -50,5 +50,56 @@ namespace keepr.Controllers return BadRequest(e.Message); } } + + [HttpGet("{id}")] + public ActionResult GetById(int id) + { + try + { + Keep keep = _ks.GetById(id); + return Ok(keep); + } + catch (System.Exception e) + { + return BadRequest(e.Message); + } + } + + [HttpPut("{keepId}")] + [Authorize] + public async Task> Update([FromBody] Keep keep, int keepId) + { + try + { + + Account userInfo = await HttpContext.GetUserInfoAsync(); + keep.CreatorId = userInfo.Id; + keep.Id = keepId; + keep = _ks.Update(keep); + return Ok(keep); + + } + catch (System.Exception e) + { + return BadRequest(e.Message); + } + + } + + [HttpDelete("{keepId}")] + [Authorize] + public async Task> Remove(int keepId) + { + try + { + Account userInfo = await HttpContext.GetUserInfoAsync(); + int removedId = _ks.Remove(keepId, userInfo.Id); + return Ok(removedId); + } + catch (System.Exception e) + { + return BadRequest(e.Message); + } + } } } \ No newline at end of file diff --git a/keepr/Repositories/KeepsRepository.cs b/keepr/Repositories/KeepsRepository.cs index da5e76d..c8e8977 100644 --- a/keepr/Repositories/KeepsRepository.cs +++ b/keepr/Repositories/KeepsRepository.cs @@ -63,5 +63,49 @@ namespace keepr.Repositories return keep; }).ToList(); } + + public Keep GetById(int id) + { + string sql = @" + UPDATE keeps + SET views = views + 1 + WHERE id = @id; + SELECT + a.*, + k.* + FROM keeps k + JOIN accounts a + ON a.id = k.creatorId + WHERE k.id = @id; + "; // TODO update view counter + return _db.Query(sql, (prof, keep) => + { + keep.Creator = prof; + return keep; + }, new {id}).FirstOrDefault(); + } + + public void Update(Keep update) + { + string sql = @" + UPDATE keeps + SET + name = @Name, + description = @Description, + img = @Img + WHERE id = @Id + "; + _db.Execute(sql, update); + } + + public void Remove(int id) + { + string sql = @" + DELETE FROM keeps + WHERE id = @id + LIMIT 1; + "; + _db.Execute(sql, new {id}); + } } } \ No newline at end of file diff --git a/keepr/Services/KeepsService.cs b/keepr/Services/KeepsService.cs index fbcf39b..c2f6f00 100644 --- a/keepr/Services/KeepsService.cs +++ b/keepr/Services/KeepsService.cs @@ -35,5 +35,35 @@ namespace keepr.Services List keeps = _repo.GetAll(); return keeps; } + + internal Keep GetById(int id) + { + return _repo.GetById(id); + } + + internal Keep Update(Keep update) + { + Keep original = GetById(update.Id); + if (original.CreatorId != update.CreatorId) + { + throw new Exception("Nacho Keep!"); + } + original.Name = update.Name ?? original.Name; + original.Description = update.Description ?? original.Description; + original.Img = update.Img ?? original.Img; + _repo.Update(original); + return original; + } + + internal int Remove(int keepId, string userId) + { + Keep original = GetById(keepId); + if (original.CreatorId != userId) + { + throw new Exception("Nacho Keep!"); + } + _repo.Remove(keepId); + return keepId; + } } } \ No newline at end of file diff --git a/keepr/dbSetup.sql b/keepr/dbSetup.sql index 1cd3a26..4885e60 100644 --- a/keepr/dbSetup.sql +++ b/keepr/dbSetup.sql @@ -42,4 +42,14 @@ CREATE TABLE IF NOT EXISTS keeps( SELECT * FROM vaults WHERE creatorId = '62df16f445a8ad25b2c9485c' - AND isPrivate = 0; \ No newline at end of file + AND isPrivate = 0; + + select * from keeps; + select * from accounts; + + SELECT + a.*, + k.* + FROM keeps k + JOIN accounts a + ON a.id = k.creatorId; \ No newline at end of file