From 647006822f01a53dade5ea040210059a98a43196 Mon Sep 17 00:00:00 2001 From: 杨宇千 Date: Sun, 18 Aug 2019 19:15:44 +0800 Subject: Add avatar controller. --- Timeline/Controllers/UserAvatarController.cs | 70 ++++++++++++++++++++++++++++ Timeline/Services/UserAvatarService.cs | 10 ++++ Timeline/Startup.cs | 2 + 3 files changed, 82 insertions(+) create mode 100644 Timeline/Controllers/UserAvatarController.cs (limited to 'Timeline') diff --git a/Timeline/Controllers/UserAvatarController.cs b/Timeline/Controllers/UserAvatarController.cs new file mode 100644 index 00000000..f61fd54a --- /dev/null +++ b/Timeline/Controllers/UserAvatarController.cs @@ -0,0 +1,70 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using System; +using System.Threading.Tasks; +using Timeline.Models.Http; +using Timeline.Services; + +namespace Timeline.Controllers +{ + [ApiController] + public class UserAvatarController : Controller + { + public static class ErrorCodes + { + public const int Get_UserNotExist = -1001; + + public const int Put_UserNotExist = -2001; + } + + private readonly ILogger _logger; + + private readonly IUserAvatarService _service; + + public UserAvatarController(ILogger logger, IUserAvatarService service) + { + _logger = logger; + _service = service; + } + + [HttpGet("users/{username}/avatar")] + public async Task Get(string username) + { + try + { + var avatar = await _service.GetAvatar(username); + return File(avatar.Data, avatar.Type); + } + catch (UserNotExistException) + { + _logger.LogInformation($"Attempt to get a avatar of a non-existent user failed. Username: {username} ."); + return NotFound(new CommonResponse(ErrorCodes.Get_UserNotExist, "User does not exist.")); + } + } + + [HttpPut("users/{username}/avatar")] + [Consumes("image/png", "image/jpeg", "image/gif", "image/webp")] + public async Task Put(string username) + { + try + { + var data = new byte[Convert.ToInt32(Request.ContentLength)]; + await Request.Body.ReadAsync(data, 0, data.Length); + + await _service.SetAvatar(username, new Avatar + { + Data = data, + Type = Request.ContentType + }); + + _logger.LogInformation($"Succeed to put a avatar of a user. Username: {username} . Mime Type: {Request.ContentType} ."); + return Ok(); + } + catch (UserNotExistException) + { + _logger.LogInformation($"Attempt to put a avatar of a non-existent user failed. Username: {username} ."); + return BadRequest(new CommonResponse(ErrorCodes.Put_UserNotExist, "User does not exist.")); + } + } + } +} diff --git a/Timeline/Services/UserAvatarService.cs b/Timeline/Services/UserAvatarService.cs index 21153575..4f11978c 100644 --- a/Timeline/Services/UserAvatarService.cs +++ b/Timeline/Services/UserAvatarService.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System; using System.IO; @@ -178,4 +179,13 @@ namespace Timeline.Services } } } + + public static class UserAvatarServiceCollectionExtensions + { + public static void AddUserAvatarService(this IServiceCollection services) + { + services.AddScoped(); + services.AddSingleton(); + } + } } diff --git a/Timeline/Startup.cs b/Timeline/Startup.cs index 414bc705..afc06d9b 100644 --- a/Timeline/Startup.cs +++ b/Timeline/Startup.cs @@ -58,6 +58,8 @@ namespace Timeline services.AddTransient(); services.AddTransient(); + services.AddUserAvatarService(); + var databaseConfig = Configuration.GetSection(nameof(DatabaseConfig)).Get(); services.AddDbContext(options => -- cgit v1.2.3