summaryrefslogtreecommitdiffstats
path: root/src/server/Api/V1/Entries/UpdateEntryRoute.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/Api/V1/Entries/UpdateEntryRoute.cs')
-rw-r--r--src/server/Api/V1/Entries/UpdateEntryRoute.cs45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/server/Api/V1/Entries/UpdateEntryRoute.cs b/src/server/Api/V1/Entries/UpdateEntryRoute.cs
new file mode 100644
index 0000000..96c60fe
--- /dev/null
+++ b/src/server/Api/V1/Entries/UpdateEntryRoute.cs
@@ -0,0 +1,45 @@
+using System.Security.Cryptography;
+using IOL.BookmarkThing.Server.Api.V1.Entries.Dtos;
+
+namespace IOL.BookmarkThing.Server.Api.V1.Entries;
+
+public class UpdateEntryRoute : RouteBaseV1Sync.WithRequest<UpdateEntryRequest>.WithActionResult<EntryDto>
+{
+ private readonly AppDbContext _context;
+
+ public UpdateEntryRoute(AppDbContext context) {
+ _context = context;
+ }
+
+
+ /// <summary>
+ /// Update an entry
+ /// </summary>
+ /// <param name="entryToUpdate">The entry to update</param>
+ /// <response code="200">Entry updated successfully</response>
+ /// <response code="400">Invalid entry</response>
+ [ProducesResponseType(typeof(EntryDto), 200)]
+ [ProducesResponseType(typeof(List<ErrorResult>), 400)]
+ [ProducesResponseType(typeof(ErrorResult), 404)]
+ [ApiVersion(ApiSpecV1.VERSION_STRING)]
+ [HttpPost("~/v{version:apiVersion}/entries/update")]
+ public override ActionResult<EntryDto> Handle(UpdateEntryRequest entryToUpdate) {
+ var entry = _context.Entries.SingleOrDefault(c => c.Id == entryToUpdate.Id && c.UserId == LoggedInUser.Id);
+ if (entry == default) {
+ return NotFound(new ErrorResult("Entry does not exist"));
+ }
+
+ var errors = entryToUpdate.GetErrors();
+ if (errors.Count != 0) {
+ return BadRequest(errors);
+ }
+
+ entry.Description = entry.Description;
+ entry.Tags = entry.Tags;
+ entry.Url = entry.Url;
+
+ _context.Update(entry);
+ _context.SaveChanges();
+ return Ok(new EntryDto(entry));
+ }
+}