Files
StopShopping/StopShopping.Api/Routes/User.cs
2026-03-25 14:55:34 +08:00

96 lines
2.7 KiB
C#

using Microsoft.Extensions.Options;
using StopShopping.Services;
using StopShopping.Services.Extensions;
using StopShopping.Services.Models.Req;
using StopShopping.Services.Models.Resp;
namespace StopShopping.Api.Routes;
public static class User
{
public static RouteGroupBuilder MapUser(this RouteGroupBuilder routes)
{
routes.MapPost("/user/signup", SignUpAsync)
.AllowAnonymous().WithTags(OpenApiTags..ToString());
routes.MapPost("/user/signin", SignInAsync)
.AllowAnonymous().WithTags(OpenApiTags..ToString());
routes.MapPost("/user/changepassword", ChangePasswordAsync)
.WithTags(OpenApiTags..ToString());
routes.MapGet("/user/info", GetUserAsync)
.WithTags(OpenApiTags..ToString());
routes.MapPost("/user/edit", EditUserAsync)
.WithTags(OpenApiTags..ToString());
return routes;
}
private static async Task<ApiResponse> SignUpAsync(
SignUpParams model,
IUserService userService)
{
await userService.SignUpAsync(model);
return ApiResponse.Succed();
}
private static async Task<ApiResponse<SignInUser>> SignInAsync(
SignInParams model,
IUserService userService,
HttpContext httpContext,
IWebHostEnvironment env,
IOptions<AppOptions> options)
{
var result = await userService.SignInAsync(model);
var resp = new ApiResponse<SignInUser>
{
IsSucced = result.IsSucced,
Data = result.User,
Message = result.Message
};
if (result.IsSucced)
{
httpContext.Response.Cookies.AppendRefreshToken(
env,
options.Value,
TimeSpan.FromSeconds(result.RefreshToken!.ExpiresIn),
result.RefreshToken.Token!
);
}
return resp;
}
private static async Task<ApiResponse> ChangePasswordAsync(
ChangePasswordParams model,
IUserService userService,
HttpContext httpContext,
IAccessTokenService accessTokenService
)
{
var resp = await userService.ChangePasswordAsync(model);
if (resp.IsSucced)
await Common.SignOutAsync(httpContext, accessTokenService);
return resp;
}
private static async Task<ApiResponse<Services.Models.Resp.User>> GetUserAsync(
IUserService userService
)
{
return await userService.GetUserInfoAsync();
}
private static async Task<ApiResponse> EditUserAsync(
EditUserParams model,
IUserService userService
)
{
return await userService.EditAsync(model);
}
}