Files
InMemoriam/Server/InMemoriam/Api/StoriesController.cs
2025-02-13 22:10:32 +01:00

71 lines
2.7 KiB
C#

using Bring2mind.InMemoriam.Common;
using Bring2mind.InMemoriam.Core.Models.Stories;
using Bring2mind.InMemoriam.Core.Repositories;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace Bring2mind.InMemoriam.Api
{
public class StoriesController : InMemoriamApiController
{
[HttpGet]
[InMemoriamAuthorize(SecurityAccessLevel.View)]
public HttpResponseMessage GetStories()
{
return Request.CreateResponse(HttpStatusCode.OK, StoryRepository.Instance.GetStories(ActiveModule.ModuleID).OrderByDescending(s => s.CreatedOnDate));
}
[HttpPost]
[InMemoriamAuthorize(SecurityAccessLevel.AddContent)]
public HttpResponseMessage EditStory(int id, [FromBody] string data)
{
var story = Newtonsoft.Json.JsonConvert.DeserializeObject<StoryBase>(data);
if (story == null || string.IsNullOrEmpty(story.Title.Trim()) || string.IsNullOrEmpty(story.Contents.Trim()))
{
return Request.CreateResponse(HttpStatusCode.BadRequest, "Invalid story data");
}
if (id == -1)
{
story.ModuleId = ActiveModule.ModuleID;
story = StoryRepository.Instance.AddStory(story, UserInfo.UserID);
return Request.CreateResponse(HttpStatusCode.OK, StoryRepository.Instance.GetStory(ActiveModule.ModuleID, story.StoryId));
}
else
{
var originalStory = StoryRepository.Instance.GetStory(ActiveModule.ModuleID, id);
if (originalStory == null)
{
return Request.CreateResponse(HttpStatusCode.NotFound, "Story not found");
}
if (!this.InMemoriamModuleContext.Security.IsFamily && originalStory.CreatedByUserID != UserInfo.UserID)
{
return AccessViolation("You are not allowed to edit this story");
}
originalStory.ReadEditedStoryBase(story);
StoryRepository.Instance.UpdateStory(originalStory, UserInfo.UserID);
return Request.CreateResponse(HttpStatusCode.OK, StoryRepository.Instance.GetStory(ActiveModule.ModuleID, id));
}
}
[HttpPost]
[InMemoriamAuthorize(SecurityAccessLevel.AddContent)]
public HttpResponseMessage DeleteStory(int id)
{
var story = StoryRepository.Instance.GetStory(ActiveModule.ModuleID, id);
if (story == null)
{
return Request.CreateResponse(HttpStatusCode.NotFound, "Story not found");
}
if (!this.InMemoriamModuleContext.Security.IsFamily && story.CreatedByUserID != UserInfo.UserID)
{
return AccessViolation("You are not allowed to delete this story");
}
StoryRepository.Instance.DeleteStory(ActiveModule.ModuleID, story.StoryId);
return Request.CreateResponse(HttpStatusCode.OK, "Story deleted");
}
}
}