Merge pull request '프론트 테스트 머지' (#2) from Academy into main

Reviewed-on: https://git.ipstein.myds.me/seonkyu.kim/AcaMate_API/pulls/2
This commit is contained in:
김선규 2025-05-19 06:46:25 +00:00
commit 28ad68bfe6
7 changed files with 192 additions and 58 deletions

68
.gitignore vendored
View File

@ -11,6 +11,74 @@
# 기본 파일 및 폴더 제외
*.log
*.env
*.bak
*.tmp
*.swp
# macOS 관련 파일 제외
._
._*
.DS_Store
.AppleDouble
.LSOverride
.Spotlight-V100
.Trashes
# Windows 관련
Thumbs.db
ehthumbs.db
desktop.ini
# Visual Studio 관련
.vscode/
.vs/
*.suo
*.user
*.userosscache
*.sln.docstates
# Rider 관련
.idea/
*.sln.iml
# .NET 관련
bin/
obj/
*.pdb
*.dll
*.exe
*.nuget/
# Blazor 관련
**/wwwroot/_framework/
./wwwroot
**/wwwroot
**/publish
./publish
# Docker 관련
docker-compose.override.yml
Dockerfile
# 기타 캐시 파일
**/*.cache
**/*.tmp# 특정 환경에 따라 추가
/private/
/publish/
/bin/
/obj/
./private/
./privacy/
./publish/
./bin/
# 기본 파일 및 폴더 제외 # 기본 파일 및 폴더 제외
*.log *.log

View File

@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
using Microsoft.AspNetCore.SignalR; using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Net.Http; using System.Net.Http;
@ -23,6 +24,7 @@ using Back.Program.Services.V1;
using Back.Program.Services.V1.Interfaces; using Back.Program.Services.V1.Interfaces;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
@ -174,6 +176,7 @@ else
///// ===== builder 설정 부 ===== ///// ///// ===== builder 설정 부 ===== /////
var app = builder.Build(); var app = builder.Build();
string staticRoot;
if (app.Environment.IsDevelopment()) if (app.Environment.IsDevelopment())
{ {
@ -181,11 +184,13 @@ if (app.Environment.IsDevelopment())
// app.UseSwaggerUI(); // app.UseSwaggerUI();
app.UseCustomSwaggerUI(); app.UseCustomSwaggerUI();
app.UseDeveloperExceptionPage(); // 좀더 자세한 예외 정보 제공 app.UseDeveloperExceptionPage(); // 좀더 자세한 예외 정보 제공
staticRoot = Path.Combine(Directory.GetCurrentDirectory(), "publish", "debug", "wwwroot");
} }
else else
{ {
app.UseExceptionHandler("/error"); app.UseExceptionHandler("/error");
app.UseHsts(); app.UseHsts();
staticRoot = Path.Combine(Directory.GetCurrentDirectory(), "publish", "release", "wwwroot");
} }
// 로컬 테스트 위한 부분 (올릴떄는 켜두기) // 로컬 테스트 위한 부분 (올릴떄는 켜두기)
@ -198,14 +203,31 @@ app.UseMiddleware<APIHeaderMiddleware>(
(object)new string[] { "iOS_AM_Connect_Key", "And_AM_Connect_Key", "Web_AM_Connect_Key" } (object)new string[] { "iOS_AM_Connect_Key", "And_AM_Connect_Key", "Web_AM_Connect_Key" }
); );
// app.UseBlazorFrameworkFiles();
// app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(staticRoot),
RequestPath = ""
});
app.UseRouting(); app.UseRouting();
app.UseCors("CorsPolicy"); app.UseCors("CorsPolicy");
app.UseAuthorization(); app.UseAuthorization();
app.UseWebSockets(); app.UseWebSockets();
app.UseEndpoints(end => app.UseEndpoints(end =>
{ {
ControllerEndpointRouteBuilderExtensions.MapControllers(end); ControllerEndpointRouteBuilderExtensions.MapControllers(end);
// 프론트 테스트 위한 부분
end.MapFallbackToFile("index.html");
end.MapHub<ChatHub>("/chatHub"); end.MapHub<ChatHub>("/chatHub");
}); });

View File

@ -7,7 +7,6 @@ namespace Back.Program.Common.Auth
/// ///
public class APIHeaderMiddleware public class APIHeaderMiddleware
{ {
private readonly RequestDelegate _next; private readonly RequestDelegate _next;
private readonly string[] _headerNames; private readonly string[] _headerNames;
// private readonly IHeaderConfig _headerConfig; // private readonly IHeaderConfig _headerConfig;
@ -26,6 +25,10 @@ namespace Back.Program.Common.Auth
return; return;
} }
// 정적 파일 요청은 미들웨어 건너뜀
var path = context.Request.Path.Value;
if (path != null && (path.StartsWith("/api")))
{
// Scoped 사용해서 값 가져오는 곳임 // Scoped 사용해서 값 가져오는 곳임
var headerConfig = context.RequestServices.GetRequiredService<IHeaderConfig>(); var headerConfig = context.RequestServices.GetRequiredService<IHeaderConfig>();
@ -56,5 +59,11 @@ namespace Back.Program.Common.Auth
await _next(context); await _next(context);
} }
{
await _next(context);
return;
}
}
} }
} }

View File

@ -1,15 +1,25 @@
using Back.Program.Services.V1.Interfaces;
using Microsoft.AspNetCore.SignalR; using Microsoft.AspNetCore.SignalR;
namespace Back.Program.Common.Chat namespace Back.Program.Common.Chat;
{
public class ChatHub : Hub public class ChatHub : Hub
{ {
private readonly ILogger<ChatHub> _logger;
private readonly IChatService _chatService;
public ChatHub(ILogger<ChatHub> logger, IChatService chatService)
{
_logger = logger;
_chatService = chatService;
}
// 클라이언트에서 메시지를 보내면 모든 사용자에게 전송 // 클라이언트에서 메시지를 보내면 모든 사용자에게 전송
public async Task SendMessage(string user, string message) public async Task SendMessage(string user, string message)
{ {
Console.WriteLine($"Message received: {user}: {message}"); Console.WriteLine($"Message received: {user}: {message}");
await Clients.All.SendAsync("ReceiveMessage", user, message); await Clients.All.SendAsync("ReceiveMessage", user, message);
} }
// 특정 사용자에게 메시지를 보냄 // 특정 사용자에게 메시지를 보냄
@ -33,10 +43,15 @@ namespace Back.Program.Common.Chat
Console.WriteLine("OnDisconnectedAsync"); Console.WriteLine("OnDisconnectedAsync");
await base.OnDisconnectedAsync(exception); await base.OnDisconnectedAsync(exception);
} }
}
public async Task JoinRoom(string cid)
{
await Groups.AddToGroupAsync(Context.ConnectionId, cid);
} }
/* public async Task JoinGroup(string cid, string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
*/ }
}

View File

@ -0,0 +1,6 @@
namespace Back.Program.Controllers.V1;
public class ChatController
{
}

View File

@ -0,0 +1,8 @@
using Back.Program.Services.V1.Interfaces;
namespace Back.Program.Services.V1;
public class ChatService: IChatService
{
}

View File

@ -0,0 +1,6 @@
namespace Back.Program.Services.V1.Interfaces;
public interface IChatService
{
}