From bcf15408ca1a1a16ccaca959861e812e6b24a33d Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 2 Feb 2020 22:52:33 +0800 Subject: Add copy to clipboard function to code generator. --- Timeline/Models/Http/ErrorResponse.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'Timeline/Models/Http/ErrorResponse.cs') diff --git a/Timeline/Models/Http/ErrorResponse.cs b/Timeline/Models/Http/ErrorResponse.cs index 87516638..a20b5386 100644 --- a/Timeline/Models/Http/ErrorResponse.cs +++ b/Timeline/Models/Http/ErrorResponse.cs @@ -1,4 +1,5 @@ -using static Timeline.Resources.Messages; + +using static Timeline.Resources.Messages; namespace Timeline.Models.Http { @@ -258,4 +259,4 @@ namespace Timeline.Models.Http } -} \ No newline at end of file +} -- cgit v1.2.3 From 5f93daed17338abbcade5eaba8936acbc4955b56 Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 3 Feb 2020 17:50:17 +0800 Subject: Add TimelineController. --- Timeline.ErrorCodes/ErrorCodes.cs | 6 +++-- .../IntegratedTests/PersonalTimelineTest.cs | 2 +- Timeline/Controllers/PersonalTimelineController.cs | 2 +- Timeline/Controllers/TimelineController.cs | 19 +++++++++++++-- Timeline/Filters/Timeline.cs | 2 +- Timeline/Models/Http/ErrorResponse.cs | 26 ++++++++++++++++++--- Timeline/Models/Http/TimelineController.cs | 8 +++++++ Timeline/Resources/Messages.Designer.cs | 27 ++++++++-------------- Timeline/Resources/Messages.resx | 15 +++++------- 9 files changed, 70 insertions(+), 37 deletions(-) (limited to 'Timeline/Models/Http/ErrorResponse.cs') diff --git a/Timeline.ErrorCodes/ErrorCodes.cs b/Timeline.ErrorCodes/ErrorCodes.cs index ea74cf0e..e07fbd94 100644 --- a/Timeline.ErrorCodes/ErrorCodes.cs +++ b/Timeline.ErrorCodes/ErrorCodes.cs @@ -56,9 +56,11 @@ public const int BadFormat_BadSize = 1_103_00_03; } - public static class TimelineController + public static class TimelineCommon { - public const int MemberPut_NotExist = 1_104_01_01; + public const int NameConflict = 1_104_01_01; + public const int NotExist = 1_104_02_01; + public const int MemberPut_NotExist = 1_104_03_01; } } } diff --git a/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs b/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs index cc170a98..7d0a68e8 100644 --- a/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs +++ b/Timeline.Tests/IntegratedTests/PersonalTimelineTest.cs @@ -165,7 +165,7 @@ namespace Timeline.Tests.IntegratedTests { var res = await client.PutAsync("/users/user1/timeline/members/usernotexist", null); res.Should().HaveStatusCode(400) - .And.HaveCommonBody(ErrorCodes.TimelineController.MemberPut_NotExist); + .And.HaveCommonBody(ErrorCodes.TimelineCommon.MemberPut_NotExist); } await AssertEmptyMembers(); { diff --git a/Timeline/Controllers/PersonalTimelineController.cs b/Timeline/Controllers/PersonalTimelineController.cs index 8cf098bf..b6c213d9 100644 --- a/Timeline/Controllers/PersonalTimelineController.cs +++ b/Timeline/Controllers/PersonalTimelineController.cs @@ -104,7 +104,7 @@ namespace Timeline.Controllers } catch (UserNotExistException) { - return BadRequest(ErrorResponse.TimelineController.MemberPut_NotExist()); + return BadRequest(ErrorResponse.TimelineCommon.MemberPut_NotExist()); } } diff --git a/Timeline/Controllers/TimelineController.cs b/Timeline/Controllers/TimelineController.cs index be271de7..d46189b8 100644 --- a/Timeline/Controllers/TimelineController.cs +++ b/Timeline/Controllers/TimelineController.cs @@ -102,7 +102,7 @@ namespace Timeline.Controllers } catch (UserNotExistException) { - return BadRequest(ErrorResponse.TimelineController.MemberPut_NotExist()); + return BadRequest(ErrorResponse.TimelineCommon.MemberPut_NotExist()); } } @@ -126,6 +126,21 @@ namespace Timeline.Controllers } } - // TODO: Create API . + [HttpPost("timelines")] + [Authorize] + public async Task> TimelineCreate([FromRoute] TimelineCreateRequest body) + { + var userId = this.GetUserId(); + + try + { + var timelineInfo = await _service.CreateTimeline(body.Name, userId); + return Ok(timelineInfo); + } + catch (ConflictException) + { + return BadRequest(ErrorResponse.TimelineCommon.NameConflict()); + } + } } } diff --git a/Timeline/Filters/Timeline.cs b/Timeline/Filters/Timeline.cs index ed78e645..e133c9d6 100644 --- a/Timeline/Filters/Timeline.cs +++ b/Timeline/Filters/Timeline.cs @@ -17,7 +17,7 @@ namespace Timeline.Filters } else { - throw new System.NotImplementedException(); + context.Result = new NotFoundObjectResult(ErrorResponse.TimelineCommon.NotExist()); } } } diff --git a/Timeline/Models/Http/ErrorResponse.cs b/Timeline/Models/Http/ErrorResponse.cs index a20b5386..0d23fe59 100644 --- a/Timeline/Models/Http/ErrorResponse.cs +++ b/Timeline/Models/Http/ErrorResponse.cs @@ -242,17 +242,37 @@ namespace Timeline.Models.Http } - public static class TimelineController + public static class TimelineCommon { + public static CommonResponse NameConflict(params object?[] formatArgs) + { + return new CommonResponse(ErrorCodes.TimelineCommon.NameConflict, string.Format(TimelineCommon_NameConflict, formatArgs)); + } + + public static CommonResponse CustomMessage_NameConflict(string message, params object?[] formatArgs) + { + return new CommonResponse(ErrorCodes.TimelineCommon.NameConflict, string.Format(message, formatArgs)); + } + + public static CommonResponse NotExist(params object?[] formatArgs) + { + return new CommonResponse(ErrorCodes.TimelineCommon.NotExist, string.Format(TimelineCommon_NotExist, formatArgs)); + } + + public static CommonResponse CustomMessage_NotExist(string message, params object?[] formatArgs) + { + return new CommonResponse(ErrorCodes.TimelineCommon.NotExist, string.Format(message, formatArgs)); + } + public static CommonResponse MemberPut_NotExist(params object?[] formatArgs) { - return new CommonResponse(ErrorCodes.TimelineController.MemberPut_NotExist, string.Format(TimelineController_MemberPut_NotExist, formatArgs)); + return new CommonResponse(ErrorCodes.TimelineCommon.MemberPut_NotExist, string.Format(TimelineCommon_MemberPut_NotExist, formatArgs)); } public static CommonResponse CustomMessage_MemberPut_NotExist(string message, params object?[] formatArgs) { - return new CommonResponse(ErrorCodes.TimelineController.MemberPut_NotExist, string.Format(message, formatArgs)); + return new CommonResponse(ErrorCodes.TimelineCommon.MemberPut_NotExist, string.Format(message, formatArgs)); } } diff --git a/Timeline/Models/Http/TimelineController.cs b/Timeline/Models/Http/TimelineController.cs index f9a4d3e5..6d461bb9 100644 --- a/Timeline/Models/Http/TimelineController.cs +++ b/Timeline/Models/Http/TimelineController.cs @@ -1,5 +1,6 @@ using System; using System.ComponentModel.DataAnnotations; +using Timeline.Models.Validation; namespace Timeline.Models.Http { @@ -11,6 +12,13 @@ namespace Timeline.Models.Http public DateTime? Time { get; set; } } + public class TimelineCreateRequest + { + [Required] + [TimelineName] + public string Name { get; set; } = default!; + } + public class TimelinePatchRequest { public string? Description { get; set; } diff --git a/Timeline/Resources/Messages.Designer.cs b/Timeline/Resources/Messages.Designer.cs index 332c8817..eeb44f10 100644 --- a/Timeline/Resources/Messages.Designer.cs +++ b/Timeline/Resources/Messages.Designer.cs @@ -151,38 +151,29 @@ namespace Timeline.Resources { } /// - /// Looks up a localized string similar to The {0}-st username to do operation {1} on is of bad format.. - /// - internal static string TimelineController_ChangeMember_UsernameBadFormat { - get { - return ResourceManager.GetString("TimelineController_ChangeMember_UsernameBadFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The {0}-st user to do operation {1} on does not exist.. + /// Looks up a localized string similar to The user to set as member does not exist.. /// - internal static string TimelineController_ChangeMember_UserNotExist { + internal static string TimelineCommon_MemberPut_NotExist { get { - return ResourceManager.GetString("TimelineController_ChangeMember_UserNotExist", resourceCulture); + return ResourceManager.GetString("TimelineCommon_MemberPut_NotExist", resourceCulture); } } /// - /// Looks up a localized string similar to The user to set as member does not exist.. + /// Looks up a localized string similar to A timeline with given name already exists.. /// - internal static string TimelineController_MemberPut_NotExist { + internal static string TimelineCommon_NameConflict { get { - return ResourceManager.GetString("TimelineController_MemberPut_NotExist", resourceCulture); + return ResourceManager.GetString("TimelineCommon_NameConflict", resourceCulture); } } /// - /// Looks up a localized string similar to The post to delete does not exist.. + /// Looks up a localized string similar to The timeline with given name does not exist.. /// - internal static string TimelineController_PostOperationDelete_NotExist { + internal static string TimelineCommon_NotExist { get { - return ResourceManager.GetString("TimelineController_PostOperationDelete_NotExist", resourceCulture); + return ResourceManager.GetString("TimelineCommon_NotExist", resourceCulture); } } diff --git a/Timeline/Resources/Messages.resx b/Timeline/Resources/Messages.resx index cb6c3891..66a84d5f 100644 --- a/Timeline/Resources/Messages.resx +++ b/Timeline/Resources/Messages.resx @@ -147,17 +147,14 @@ Model is of bad format. - - The {0}-st username to do operation {1} on is of bad format. - - - The {0}-st user to do operation {1} on does not exist. - - + The user to set as member does not exist. - - The post to delete does not exist. + + A timeline with given name already exists. + + + The timeline with given name does not exist. Username or password is invalid. -- cgit v1.2.3