Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OrganizationService.Core.ApiModels;
using OrganizationService.Service.ApiModels.Class;
using OrganizationService.Service.Dtos.Class;
using OrganizationService.Service.Implementation;
using OrganizationService.Service.Interfaces;

namespace OrganizationService.Api.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ClassController : BaseApiController
{
public IClassService _classService { get; set; }
private readonly IConfiguration _configuration;

public ClassController(IServiceProvider serviceProvider, IClassService classService, IConfiguration configuration) : base(serviceProvider)
{
_configuration = configuration;
_classService = classService;
}

[HttpPost("public")]
public async Task<IActionResult> GetViewModelsAsync([FromBody] ClassModel classModel)
{
var result = await _classService.GetViewModelsAsync(classModel);
var listResult = new PaginatedList<ClassDto>(result.ToList(), result.Count(), classModel.PageIndex, classModel.PageSize);
return Success(listResult);
}

//get project by id
[HttpGet("{id}")]
public async Task<IActionResult> GetClassById(Guid id)
{
var result = await _classService.GetByIdAsync(id);
return Success(result);
}

//add project
[HttpPost("add")]
public async Task<IActionResult> AddClass([FromBody] CreateClassRequest addProjectModel)
{
await _classService.CreateAsync(addProjectModel);
return Success();
}

//edit project
[HttpPut("edit/{classId}")]
public async Task<IActionResult> EditDetailClass(Guid classId, [FromBody] UpdateClassRequest editClassModel)
{
var result = await _classService.UpdateAsync(classId, editClassModel);
return Success(result);
}

//delete project
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteClass(Guid id)
{
await _classService.DeleteAsync(id);
return Success();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OrganizationService.Core.ApiModels;
using OrganizationService.Service.ApiModels.Class;
using OrganizationService.Service.ApiModels.Grade;
using OrganizationService.Service.Dtos.Class;
using OrganizationService.Service.Dtos.Grade;
using OrganizationService.Service.Interfaces;

namespace OrganizationService.Api.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class GradeController : BaseApiController
{
public IGradeService _gradeService { get; set; }
private readonly IConfiguration _configuration;

public GradeController(IServiceProvider serviceProvider, IGradeService gradeService, IConfiguration configuration) : base(serviceProvider)
{
_configuration = configuration;
_gradeService = gradeService;
}

[HttpPost("public")]
public async Task<IActionResult> GetViewModelsAsync([FromBody] GradeModel gradeModel)
{
var result = await _gradeService.GetViewModelsAsync(gradeModel);
var listResult = new PaginatedList<GradeDto>(result.ToList(), result.Count(), gradeModel.PageIndex, gradeModel.PageSize);
return Success(listResult);
}

//get project by id
[HttpGet("{id}")]
public async Task<IActionResult> GetGradeById(Guid id)
{
var result = await _gradeService.GetByIdAsync(id);
return Success(result);
}

//add project
[HttpPost("add")]
public async Task<IActionResult> AddGrade([FromBody] CreateGradeRequest addGradeModel)
{
await _gradeService.CreateAsync(addGradeModel);
return Success();
}

//edit project
[HttpPut("edit/{gradeId}")]
public async Task<IActionResult> EditDetailGrade(Guid gradeId, [FromBody] UpdateGradeRequest editGradeModel)
{
var result = await _gradeService.UpdateAsync(gradeId, editGradeModel);
return Success(result);
}

//delete project
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteGrade(Guid id)
{
var result = await _gradeService.DeleteAsync(id);
return Success(result);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OrganizationService.Core.ApiModels;
using OrganizationService.Service.ApiModels.Grade;
using OrganizationService.Service.ApiModels.Organization;
using OrganizationService.Service.Dtos.Grade;
using OrganizationService.Service.Dtos.Organization;
using OrganizationService.Service.Implementation;
using OrganizationService.Service.Interfaces;

namespace OrganizationService.Api.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class OrganizationController : BaseApiController
{
public IOrganizationService _organizationService { get; set; }
private readonly IConfiguration _configuration;

public OrganizationController(IServiceProvider serviceProvider, IOrganizationService organizationService, IConfiguration configuration) : base(serviceProvider)
{
_configuration = configuration;
_organizationService = organizationService;
}

[HttpPost("public")]
public async Task<IActionResult> GetViewModelsAsync([FromBody] OrganizationModel orgModel)
{
var result = await _organizationService.GetViewModelsAsync(orgModel);
var listResult = new PaginatedList<OrganizationDto>(result.ToList(), result.Count(), orgModel.PageIndex, orgModel.PageSize);
return Success(listResult);
}

//get project by id
[HttpGet("{id}")]
public async Task<IActionResult> GetOrganizationById(Guid id)
{
var result = await _organizationService.GetByIdAsync(id);
return Success(result);
}

//add project
[HttpPost("add")]
public async Task<IActionResult> AddOrganization([FromBody] CreateOrganizationRequest addOrgModel)
{
await _organizationService.CreateAsync(addOrgModel);
return Success();
}

//edit project
[HttpPut("edit/{orgId}")]
public async Task<IActionResult> EditDetailOrganization(Guid orgId, [FromBody] UpdateOrganizationRequest editOrgModel)
{
var result = await _organizationService.UpdateAsync(orgId, editOrgModel);
return Success(result);
}

//delete project
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteOrganization(Guid id)
{
var result = await _organizationService.DeleteAsync(id);
return Success(result);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OrganizationService.Core.ApiModels;
using OrganizationService.Service.ApiModels.Class;
using OrganizationService.Service.ApiModels.OrganizationMember;
using OrganizationService.Service.Dtos.Class;
using OrganizationService.Service.Dtos.OrganizationMember;
using OrganizationService.Service.Interfaces;

namespace OrganizationService.Api.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class OrganizationMemberController : BaseApiController
{
public IOrganizationMemberService _orgMemberService { get; set; }
private readonly IConfiguration _configuration;

public OrganizationMemberController(IServiceProvider serviceProvider, IOrganizationMemberService orgMemberService, IConfiguration configuration) : base(serviceProvider)
{
_configuration = configuration;
_orgMemberService = orgMemberService;
}

[HttpPost("public")]
public async Task<IActionResult> GetViewModelsAsync([FromBody] OrganizationMemberModel orgMemberModel)
{
var result = await _orgMemberService.GetViewModelsAsync(orgMemberModel);
var listResult = new PaginatedList<OrganizationMemberDto>(result.ToList(), result.Count(), orgMemberModel.PageIndex, orgMemberModel.PageSize);
return Success(listResult);
}

//get project by id
[HttpGet("{id}")]
public async Task<IActionResult> GetOrganizationMemberById(Guid id)
{
var result = await _orgMemberService.GetByIdAsync(id);
return Success(result);
}

//add project
[HttpPost("add")]
public async Task<IActionResult> AddClass([FromBody] CreateOrganizationMemberRequest addOrgMemberModel)
{
await _orgMemberService.CreateAsync(addOrgMemberModel);
return Success();
}

//edit project
[HttpPut("edit/{classId}")]
public async Task<IActionResult> EditDetailClass(Guid classId, [FromBody] UpdateOrganizationMemberRequest editOrgMemberModel)
{
var result = await _orgMemberService.UpdateAsync(classId, editOrgMemberModel);
return Success(result);
}

//delete project
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteOrganizationMember(Guid id)
{
await _orgMemberService.DeleteAsync(id);
return Success();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@ private async Task HandleExceptionAsync(HttpContext context, Exception exception
var requestBody = Encoding.UTF8.GetString(buffer);
builder.AppendLine($"Body: {requestBody}");

// context.Request.Body.Position = 0;
}
builder.AppendLine("Outgoing Response:");
builder.AppendLine($"Message: {exception.Message}");
Expand All @@ -141,9 +140,23 @@ private async Task HandleExceptionAsync(HttpContext context, Exception exception
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;

var apiResponse = new ApiResponseModel
{
Code = (int)HttpStatusCode.InternalServerError,
Message = "Lỗi hệ thống. Vui lòng thử lại sau.",
Status = "fail",
Result = null
};

await context.Response.WriteAsync("An error occurred. Please contact AmericanBank support.");
await context.Response.WriteAsync(exception.Message + exception.StackTrace);
var jsonResponse = JsonConvert.SerializeObject(apiResponse, new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
});

// await context.Response.WriteAsync("An error occurred. Please contact CodeCampus support.");
// await context.Response.WriteAsync(exception.Message + exception.StackTrace);

await context.Response.WriteAsync(jsonResponse);
}

private async Task LogRequest(HttpContext context)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.6" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.6" />
Expand Down
8 changes: 7 additions & 1 deletion OrganizationService/OrganizationService.Api/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
using OrganizationService.DataAccess.DbContexts;
using OrganizationService.DataAccess.Implementation;
using OrganizationService.DataAccess.Interfaces;
using OrganizationService.Service.Implementation;
using OrganizationService.Service.Interfaces;
using System.Data;
using System.Text;
using System.Text.Json.Serialization;
Expand All @@ -36,7 +38,11 @@
builder.Services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
builder.Services.AddScoped<IUnitOfWork, UnitOfWork>();
builder.Services.AddScoped<UserContext>();

builder.Services.AddScoped<IStudentCredentialService, StudentCredentialService>();
builder.Services.AddScoped<IClassService, ClassService>();
builder.Services.AddScoped<IGradeService, GradeService>();
builder.Services.AddScoped<IOrganizationService, OrganizationService.Service.Implementation.OrganizationService>();
builder.Services.AddScoped<IOrganizationMemberService, OrganizationMemberService>();


builder.Services.Configure<IdentityOptions>(options =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class PagingBaseModel
{
[DefaultValue(1)]
public int PageIndex { get; set; }
[DefaultValue(20)]
[DefaultValue(30)]
public int PageSize { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="BCrypt.Net-Next" Version="4.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.6">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,6 @@ public async Task<IEnumerable<object>> GetDistinctColumnAsync(string columnName)
};
return result.Distinct();
}



public async Task<IEnumerable<T>> GetListAsync()
{
return await ActiveRecords.ToListAsync();
Expand All @@ -133,6 +130,7 @@ public async Task<T> FindAsync(Expression<Func<T, bool>> predicate)
public async Task InsertAsync(T obj)
{
obj.CreatedBy = _userContext.UserId;
obj.CreatedAt = DateTime.UtcNow;

await _dbContext.Set<T>().AddAsync(obj);
}
Expand All @@ -158,13 +156,28 @@ public void UpdateMany(IEnumerable<T> objs)

public void Delete(T obj)
{
obj.UpdatedAt = DateTime.UtcNow;
obj.UpdatedBy = _userContext.UserId;
obj.DeletedAt = DateTime.UtcNow;
obj.DeletedBy = _userContext.UserId;
obj.IsDeleted = true;

_dbContext.Set<T>().Update(obj);
}

public async Task DeleteAsync(Guid id)
{
var entity = await _dbContext.Set<T>()
.FirstOrDefaultAsync(x => x.Id == id && !x.IsDeleted);

if (entity == null)
throw new KeyNotFoundException("Không tìm thấy bản ghi hoặc đã bị xóa.");

entity.DeletedAt = DateTime.UtcNow;
entity.DeletedBy = _userContext.UserId;
entity.IsDeleted = true;

await _dbContext.SaveChangesAsync();
}

public async Task<T> DeleteByIdAsync(Guid id)
{
var obj = await FindByIdAsync(id);
Expand Down
Loading