Skip to content

Commit a509497

Browse files
fix bug login
1 parent 0f67aa5 commit a509497

File tree

17 files changed

+142
-68
lines changed

17 files changed

+142
-68
lines changed

Controllers/AuthController.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
namespace PaymentCoreServiceApi.Controllers;
88

99
[ApiController]
10-
[Route("api/[controller]")]
10+
[Route("Api/[controller]")]
1111
[Authorize]
1212
public class AuthController : ControllerBaseCustom
1313
{
@@ -17,11 +17,11 @@ public AuthController(IMediator mediator)
1717
{
1818
_mediator = mediator;
1919
}
20-
[HttpPost("login")]
20+
[HttpPost("Login")]
2121
[AllowAnonymous]
2222
public async Task<IActionResult> Login([FromBody] LoginCommand command)
2323
{
2424
var response = await _mediator.Send(command);
2525
return Ok(response);
2626
}
27-
}
27+
}

Controllers/FileController.cs

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
using System.Globalization;
2+
using System.Text;
3+
using System.Text.RegularExpressions;
14
using Microsoft.AspNetCore.Mvc;
25
using PaymentCoreServiceApi.Services;
36
using PaymentCoreServiceApi.Common;
@@ -25,7 +28,7 @@ public FileController(IMinIOService minIOService, ILogger<FileController> logger
2528
/// <returns>Tên file đã được lưu</returns>
2629
[HttpPost("upload")]
2730
public async Task<ActionResult<ApiResponse<FileUploadResponse>>> UploadFile(
28-
IFormFile file,
31+
IFormFile file,
2932
[FromForm] string? customFileName = null)
3033
{
3134
try
@@ -83,12 +86,15 @@ public async Task<ActionResult<ApiResponse<List<FileUploadResponse>>>> UploadMul
8386
{
8487
if (file.Length > 0)
8588
{
86-
var fileName = await _minIOService.UploadFileAsync(file);
87-
var fileUrl = await _minIOService.GetFileUrlAsync(fileName);
8889

90+
var safeFileName = SanitizeFileName(file.FileName);
91+
var extension = Path.GetExtension(safeFileName);
92+
var uniqueFileName = $"{Guid.NewGuid()}{extension}";
93+
var uploadedFileName = await _minIOService.UploadFileAsync(file, uniqueFileName);
94+
var fileUrl= await _minIOService.GetFileUrlAsync(uploadedFileName);
8995
responses.Add(new FileUploadResponse
9096
{
91-
FileName = fileName,
97+
FileName = uploadedFileName,
9298
OriginalFileName = file.FileName,
9399
FileSize = file.Length,
94100
ContentType = file.ContentType,
@@ -108,8 +114,8 @@ public async Task<ActionResult<ApiResponse<List<FileUploadResponse>>>> UploadMul
108114
_logger.LogWarning($"Một số file upload thất bại: {string.Join(", ", errors)}");
109115
}
110116

111-
var message = errors.Any()
112-
? $"Upload hoàn thành với {errors.Count} lỗi"
117+
var message = errors.Any()
118+
? $"Upload hoàn thành với {errors.Count} lỗi"
113119
: "Upload tất cả file thành công";
114120

115121
return Ok(ApiResponse<List<FileUploadResponse>>.Success(responses, message));
@@ -121,6 +127,26 @@ public async Task<ActionResult<ApiResponse<List<FileUploadResponse>>>> UploadMul
121127
}
122128
}
123129

130+
private string SanitizeFileName(string fileName)
131+
{
132+
// Lấy phần tên gốc
133+
fileName = Path.GetFileName(fileName);
134+
135+
// Loại bỏ dấu tiếng Việt
136+
fileName = fileName.Normalize(NormalizationForm.FormD);
137+
var chars = fileName
138+
.Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
139+
.ToArray();
140+
fileName = new string(chars);
141+
142+
// Thay thế ký tự không hợp lệ thành "_"
143+
fileName = Regex.Replace(fileName, @"[^a-zA-Z0-9_.-]", "_");
144+
145+
// Giữ nguyên đuôi file
146+
return fileName;
147+
148+
}
149+
124150
/// <summary>
125151
/// Download file từ MinIO
126152
/// </summary>
@@ -133,7 +159,7 @@ public async Task<IActionResult> DownloadFile(string fileName)
133159
{
134160
var fileStream = await _minIOService.DownloadFileAsync(fileName);
135161
var contentType = GetContentType(fileName);
136-
162+
137163
_logger.LogInformation($"File '{fileName}' đã được download thành công");
138164
return File(fileStream, contentType, fileName);
139165
}
@@ -152,13 +178,13 @@ public async Task<IActionResult> DownloadFile(string fileName)
152178
/// <returns>URL tạm thời</returns>
153179
[HttpGet("url/{fileName}")]
154180
public async Task<ActionResult<ApiResponse<FileUrlResponse>>> GetFileUrl(
155-
string fileName,
181+
string fileName,
156182
[FromQuery] int expiryInSeconds = 3600)
157183
{
158184
try
159185
{
160186
var url = await _minIOService.GetFileUrlAsync(fileName, expiryInSeconds);
161-
187+
162188
var response = new FileUrlResponse
163189
{
164190
FileName = fileName,
@@ -187,7 +213,7 @@ public async Task<ActionResult<ApiResponse<object>>> DeleteFile(string fileName)
187213
try
188214
{
189215
var result = await _minIOService.DeleteFileAsync(fileName);
190-
216+
191217
if (result)
192218
{
193219
_logger.LogInformation($"File '{fileName}' đã được xóa thành công");
@@ -241,4 +267,4 @@ public class FileUrlResponse
241267
public int ExpiryInSeconds { get; set; }
242268
public DateTime ExpiresAt { get; set; }
243269
}
244-
}
270+
}

Controllers/MessagesController.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,22 @@ public MessagesController(IMediator mediator)
2323
/// </summary>
2424
/// <param name="command">Thông tin tin nhắn</param>
2525
/// <returns>Tin nhắn đã gửi</returns>
26-
[HttpPost("send")]
26+
[HttpPost("Send")]
2727
public async Task<IActionResult> SendMessage([FromBody] SendMessageCommand command)
2828
{
2929
var result = await _mediator.Send(command);
3030
return OK(result);
3131
}
32-
32+
3333
/// <summary>
3434
/// Lấy tin nhắn trong cuộc trò chuyện
3535
/// </summary>
3636
/// <param name="query">Thông tin cuộc trò chuyện</param>
3737
/// <returns>Danh sách tin nhắn</returns>
38-
[HttpGet("conversation")]
38+
[HttpGet("GetMessages")]
3939
public async Task<IActionResult> GetMessages([FromQuery] GetMessagesQuery query)
4040
{
4141
var result = await _mediator.Send(query);
4242
return OK(result);
4343
}
44-
}
44+
}

Core/Entities/BaseModel/BaseModel.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ public abstract class EntityBase
1414
public bool Deleted { get; set; } = false;
1515
public int? DeletedBy { get; set; } = null;
1616
public DateTime? DeletedAt { get; set; } = null;
17-
public long CreatedBy { get; set; } = 0;
18-
public long UpdatedBy { get; set; } = 0;
19-
}
17+
public long? CreatedBy { get; set; } = 0;
18+
public long? UpdatedBy { get; set; } = 0;
19+
}

Core/Entities/UserGenerated/User.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@
22

33
namespace PaymentCoreServiceApi.Core.Entities.UserGenerated;
44

5-
public class User: EntityBase
5+
public class User : EntityBase
66
{
77
public string? NickName { get; set; }
8-
public string Avatar { get; set; }
8+
public string? Avatar { get; set; }
99
public int? Gender { get; set; }
1010
public DateTime? BirthDate { get; set; }
11-
public int Age { get; set; }
12-
public string Email { get; set; }
13-
public string UserName { get; set; }
14-
public string Password { get; set; }
15-
public string PhoneNumber { get; set; }
16-
public string Address { get; set; }
17-
}
11+
public int? Age { get; set; }
12+
public string? Email { get; set; }
13+
public string UserName { get; set; } = null!;
14+
public string Password { get; set; } = null!;
15+
public string? PhoneNumber { get; set; }
16+
public string? Address { get; set; }
17+
}
18+

Features/Auth/Commands/LoginCommand.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.ComponentModel.DataAnnotations;
12
using MediatR;
23
using PaymentCoreServiceApi.Common.Mediator;
34

Features/Auth/Commands/LoginCommandHandler.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ public async Task<ApiResponse<LoginResponse>> Handle(LoginCommand request, Cance
3737
}
3838

3939
var user = await _context.Users
40-
.FirstOrDefaultAsync(u =>
41-
(u.UserName == request.UserName || u.Email == request.UserName)
42-
&& u.Active && !u.Deleted,
40+
.FirstOrDefaultAsync(u =>
41+
(u.UserName == request.UserName || u.Email == request.UserName)
42+
&& u.Active && !u.Deleted,
4343
cancellationToken);
4444

4545
if (user == null)
@@ -53,7 +53,7 @@ public async Task<ApiResponse<LoginResponse>> Handle(LoginCommand request, Cance
5353

5454
// Generate JWT token
5555
var token = _jwtService.GenerateToken(user);
56-
56+
5757
// Create response
5858
var loginResponse = new LoginResponse
5959
{
@@ -67,7 +67,7 @@ public async Task<ApiResponse<LoginResponse>> Handle(LoginCommand request, Cance
6767
catch (Exception ex)
6868
{
6969
// Log the exception if needed
70-
return ApiResponse<LoginResponse>.InternalServerError("An error occurred during login");
70+
return ApiResponse<LoginResponse>.InternalServerError(ex.Message);
7171
}
7272
}
73-
}
73+
}

Features/Auth/JwtService.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public string GenerateToken(User user)
2929
var claims = new[]
3030
{
3131
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
32-
new Claim(ClaimTypes.Name, user.UserName),
33-
new Claim(ClaimTypes.Email, user.Email),
32+
/*new Claim(ClaimTypes.Name, user.UserName),
33+
new Claim(ClaimTypes.Email, user.Email),*/
3434
};
3535

3636
var token = new JwtSecurityToken(
@@ -50,7 +50,7 @@ public string GenerateToken(User user)
5050
{
5151
var tokenHandler = new JwtSecurityTokenHandler();
5252
var key = Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]!);
53-
53+
5454
var validationParameters = new TokenValidationParameters
5555
{
5656
ValidateIssuerSigningKey = true,

Features/Messages/Commands/SendMessageCommandHandler.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ public async Task<ApiResponse<Message>> Handle(SendMessageCommand request, Cance
5151
Content = request.Content?.Trim()
5252
};
5353
_messageWriteRepository.AddAsync(message);
54+
//add pubsub
55+
//add socket
5456
_messageWriteRepository.CommitAsync();
5557

5658
return ApiResponse<Message>.Success(message);
Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,16 @@
1-
using System.ComponentModel.DataAnnotations;
21
using PaymentCoreServiceApi.Common.Mediator;
32
using PaymentCoreServiceApi.Core.Entities.UserGenerated;
43

5-
namespace PaymentCoreServiceApi.Features.Users.Commands;
6-
7-
public record CreateUserCommand: IRequestApiResponse<User>
4+
public record CreateUserCommand : IRequestApiResponse<User>
85
{
9-
public string NickName { get; set; }
10-
public string Avatar { get; set; }
6+
public string? NickName { get; set; } // ✅ optional
7+
public string? Avatar { get; set; }
118
public int? Gender { get; set; }
129
public DateTime? BirthDate { get; set; }
13-
public int Age { get; set; }
14-
public string Email { get; set; }
15-
[Required]
16-
public string UserName { get; set; }
17-
[Required]
18-
public string Password { get; set; }
19-
public string PhoneNumber { get; set; }
20-
public string Address { get; set; }
10+
public int? Age { get; set; }
11+
public string? Email { get; set; }
12+
public string UserName { get; set; } = string.Empty;
13+
public string Password { get; set; } = string.Empty;
14+
public string? PhoneNumber { get; set; }
15+
public string? Address { get; set; }
2116
}

0 commit comments

Comments
 (0)