From 082b7ebd112d426ad59615d009e715ee10bbbc69 Mon Sep 17 00:00:00 2001 From: pytas0811 <105399564+pytas0811@users.noreply.github.com> Date: Thu, 5 Oct 2023 12:36:53 +0700 Subject: [PATCH 1/5] Update IdentityData --- Script.sql | Bin 572398 -> 395654 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Script.sql b/Script.sql index bfae50638536d3cbac3c255f8394a447edbc217a..2fbe3151c5938b65465f731deae4d6389f7e5158 100644 GIT binary patch delta 1915 zcmai#-%FEG7{{M?Z)OCJuFUQt-hPm!@Al5Q6;X3er*1l5b-FI1sdKq9r^|GMu#3@?mfGB z)chNCLSp=>1kTQ@rQZctIp5N3ziNFR)pn6vAT-F4CVC(EBH$eaibrNl_+c z1VldRsf)Zwj4rSluupTNDE-{%0p1kp1JWrsB}yE>%(G5P$<4;f9^{XIHA23vJ9w2o zmZMJ!4T_*0L78cCc+g`}?vOJ<^c>#`?4{7Fqb^<*$qzDv3JrpF1m2@E0bf6&Ww~d` z43S5Py8yF6H$@z);Vr*7qg`$+^(RxeE8p6+Hf`OrTj!lBn`ANwc^m9ga0$r(XoAch zDnCuCDC;K=#1E#d`P4KpHeGU1R#pI#y)+Aw1e+c8opTkZO#oSD-a z$&O*JKho{jIqhuKFe+gXi43_#@Y{%#2VjEPB7;Rm!~9n*5CB9E62_V9L9Z4-S$&o` zQBH-prwpTvsEV>glm##kQ_3lscf(0(rh+lbg}2(J#s&Dkp%0hM&-#JNk@uRrM!<3; zC_o^D&J(0dLScnOosh{fFH(VV`YVHI9ek-rKy|%R+yLYfFc$zm#fTw87>Pze8^V!E zPDRw(jb`f74uS2st1*Gfl~LFIDr}{e*J-aIOr7UBNdRx2z-i2z#{{d;@dI6via^5O z!1$H}J0Mpf80M_aof(?ncAly%RIWOXS*9*2HzA{YV7EVT{l_vNpB}U;?>1c*YLASM z7BUDkM1>=GBZ}pdNI&VcYzYiu)S1NcePB^fW32Np0g$%vA8vkKfDxj72I8n z98DW{vCd0kFCN?H7fQ^n(AoA)^OVjwz-VF|WHeXIQ-|I>`~#iG BGj#v} delta 179407 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%0ADc((ipd2lOhZ+C+&fvrvf%j6 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 ABLDyZ From 6cfa76ad3e6d4fde5d7ed3ce81b6d8dc8e9e181c Mon Sep 17 00:00:00 2001 From: pytas0811 <105399564+pytas0811@users.noreply.github.com> Date: Thu, 5 Oct 2023 17:07:00 +0700 Subject: [PATCH 2/5] Add Customer, Staff, Payment, Order, Order History Service --- .../Entity/Staff.cs | 1 - .../Interface/ICustomerRepository.cs | 8 ++ .../Interface/IOrderHistoryRepository.cs | 8 ++ .../Interface/IOrderRepository.cs | 8 ++ .../Interface/IPaymentRepository.cs | 8 ++ .../Interface/IStaffRepository.cs | 7 + .../Interface/IBuidingService.cs | 7 +- .../Interface/ICustomerService.cs | 13 ++ .../Interface/ILaundryStoreService.cs | 6 +- .../Interface/IOrderHistoryService.cs | 13 ++ .../Interface/IOrderService.cs | 13 ++ .../Interface/IPaymentService.cs | 13 ++ .../Interface/IStaffService.cs | 12 ++ .../Interface/ITransactionService.cs | 3 +- .../Models/CustomerModel.cs | 7 + .../Models/OrderModel.cs | 11 +- .../Models/StaffModel.cs | 12 +- .../Repository/CustomerRepository.cs | 16 +++ .../Repository/OrderHistoryRepository.cs | 15 +++ .../Repository/OrderRepository.cs | 15 +++ .../Repository/PaymentRepository.cs | 15 +++ .../Repository/StaffRepository.cs | 14 ++ .../Services/CustomerService.cs | 59 +++++++++ .../Services/LaundryStoreService.cs | 5 +- .../Services/OrderHistoryService.cs | 63 +++++++++ .../Services/OrderService.cs | 68 ++++++++++ .../Services/PaymentService.cs | 60 +++++++++ .../Services/StaffService.cs | 58 +++++++++ .../Services/TransactionService.cs | 6 + .../Controllers/CustomerController.cs | 118 +++++++++++++++++ .../Controllers/LaundryStoreController.cs | 28 +++- .../Controllers/OrderController.cs | 119 +++++++++++++++++ .../Controllers/OrderHistoryController.cs | 119 +++++++++++++++++ .../Controllers/PaymentController.cs | 121 ++++++++++++++++++ .../Controllers/StaffController.cs | 118 +++++++++++++++++ .../Controllers/StaffTripController.cs | 22 ++++ .../Controllers/TimeScheduleController.cs | 23 ++++ .../Controllers/WalletController.cs | 2 + 38 files changed, 1189 insertions(+), 25 deletions(-) create mode 100644 src/SWD-Laundry-Backend.Contract.Repository/Interface/ICustomerRepository.cs create mode 100644 src/SWD-Laundry-Backend.Contract.Repository/Interface/IOrderHistoryRepository.cs create mode 100644 src/SWD-Laundry-Backend.Contract.Repository/Interface/IOrderRepository.cs create mode 100644 src/SWD-Laundry-Backend.Contract.Repository/Interface/IPaymentRepository.cs create mode 100644 src/SWD-Laundry-Backend.Contract.Repository/Interface/IStaffRepository.cs create mode 100644 src/SWD-Laundry-Backend.Contract.Service/Interface/ICustomerService.cs create mode 100644 src/SWD-Laundry-Backend.Contract.Service/Interface/IOrderHistoryService.cs create mode 100644 src/SWD-Laundry-Backend.Contract.Service/Interface/IOrderService.cs create mode 100644 src/SWD-Laundry-Backend.Contract.Service/Interface/IPaymentService.cs create mode 100644 src/SWD-Laundry-Backend.Contract.Service/Interface/IStaffService.cs create mode 100644 src/SWD-Laundry-Backend.Core/Models/CustomerModel.cs create mode 100644 src/SWD-Laundry-Backend.Repository/Repository/CustomerRepository.cs create mode 100644 src/SWD-Laundry-Backend.Repository/Repository/OrderHistoryRepository.cs create mode 100644 src/SWD-Laundry-Backend.Repository/Repository/OrderRepository.cs create mode 100644 src/SWD-Laundry-Backend.Repository/Repository/PaymentRepository.cs create mode 100644 src/SWD-Laundry-Backend.Repository/Repository/StaffRepository.cs create mode 100644 src/SWD-Laundry-Backend.Service/Services/CustomerService.cs create mode 100644 src/SWD-Laundry-Backend.Service/Services/OrderHistoryService.cs create mode 100644 src/SWD-Laundry-Backend.Service/Services/OrderService.cs create mode 100644 src/SWD-Laundry-Backend.Service/Services/PaymentService.cs create mode 100644 src/SWD-Laundry-Backend.Service/Services/StaffService.cs create mode 100644 src/SWD-Laundry-Backend/Controllers/CustomerController.cs create mode 100644 src/SWD-Laundry-Backend/Controllers/OrderController.cs create mode 100644 src/SWD-Laundry-Backend/Controllers/OrderHistoryController.cs create mode 100644 src/SWD-Laundry-Backend/Controllers/PaymentController.cs create mode 100644 src/SWD-Laundry-Backend/Controllers/StaffController.cs diff --git a/src/SWD-Laundry-Backend.Contract.Repository/Entity/Staff.cs b/src/SWD-Laundry-Backend.Contract.Repository/Entity/Staff.cs index 2a4d649..db37595 100644 --- a/src/SWD-Laundry-Backend.Contract.Repository/Entity/Staff.cs +++ b/src/SWD-Laundry-Backend.Contract.Repository/Entity/Staff.cs @@ -11,5 +11,4 @@ public class Staff : BaseEntity public ApplicationUser ApplicationUser { get; set; } - //public List Staff_Trips { get; set; } } \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Contract.Repository/Interface/ICustomerRepository.cs b/src/SWD-Laundry-Backend.Contract.Repository/Interface/ICustomerRepository.cs new file mode 100644 index 0000000..d390876 --- /dev/null +++ b/src/SWD-Laundry-Backend.Contract.Repository/Interface/ICustomerRepository.cs @@ -0,0 +1,8 @@ +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Repository.Infrastructure; + +namespace SWD_Laundry_Backend.Contract.Repository.Interface; + +public interface ICustomerRepository : IRepository +{ +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Contract.Repository/Interface/IOrderHistoryRepository.cs b/src/SWD-Laundry-Backend.Contract.Repository/Interface/IOrderHistoryRepository.cs new file mode 100644 index 0000000..6d5d734 --- /dev/null +++ b/src/SWD-Laundry-Backend.Contract.Repository/Interface/IOrderHistoryRepository.cs @@ -0,0 +1,8 @@ +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Repository.Infrastructure; + +namespace SWD_Laundry_Backend.Contract.Repository.Interface; + +public interface IOrderHistoryRepository : IRepository +{ +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Contract.Repository/Interface/IOrderRepository.cs b/src/SWD-Laundry-Backend.Contract.Repository/Interface/IOrderRepository.cs new file mode 100644 index 0000000..38125f9 --- /dev/null +++ b/src/SWD-Laundry-Backend.Contract.Repository/Interface/IOrderRepository.cs @@ -0,0 +1,8 @@ +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Repository.Infrastructure; + +namespace SWD_Laundry_Backend.Contract.Repository.Interface; + +public interface IOrderRepository : IRepository +{ +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Contract.Repository/Interface/IPaymentRepository.cs b/src/SWD-Laundry-Backend.Contract.Repository/Interface/IPaymentRepository.cs new file mode 100644 index 0000000..9f024f4 --- /dev/null +++ b/src/SWD-Laundry-Backend.Contract.Repository/Interface/IPaymentRepository.cs @@ -0,0 +1,8 @@ +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Repository.Infrastructure; + +namespace SWD_Laundry_Backend.Contract.Repository.Interface; + +public interface IPaymentRepository : IRepository +{ +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Contract.Repository/Interface/IStaffRepository.cs b/src/SWD-Laundry-Backend.Contract.Repository/Interface/IStaffRepository.cs new file mode 100644 index 0000000..0aeb5e3 --- /dev/null +++ b/src/SWD-Laundry-Backend.Contract.Repository/Interface/IStaffRepository.cs @@ -0,0 +1,7 @@ +using SWD_Laundry_Backend.Contract.Repository.Infrastructure; + +namespace SWD_Laundry_Backend.Contract.Repository.Interface; + +public interface IStaffRepository : IRepository +{ +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Contract.Service/Interface/IBuidingService.cs b/src/SWD-Laundry-Backend.Contract.Service/Interface/IBuidingService.cs index bae7327..a31e30b 100644 --- a/src/SWD-Laundry-Backend.Contract.Service/Interface/IBuidingService.cs +++ b/src/SWD-Laundry-Backend.Contract.Service/Interface/IBuidingService.cs @@ -3,7 +3,10 @@ using SWD_Laundry_Backend.Core.Models; namespace SWD_Laundry_Backend.Contract.Service.Interface; -public interface IBuidingService : ICreateAble, IGetAble, IUpdateAble, IDeleteAble +public interface IBuidingService : + ICreateAble, + IGetAble, + IUpdateAble, + IDeleteAble { - } diff --git a/src/SWD-Laundry-Backend.Contract.Service/Interface/ICustomerService.cs b/src/SWD-Laundry-Backend.Contract.Service/Interface/ICustomerService.cs new file mode 100644 index 0000000..9d91359 --- /dev/null +++ b/src/SWD-Laundry-Backend.Contract.Service/Interface/ICustomerService.cs @@ -0,0 +1,13 @@ +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Service.Base_Service_Interface; +using SWD_Laundry_Backend.Core.Models; + +namespace SWD_Laundry_Backend.Contract.Service.Interface; + +public interface ICustomerService : + ICreateAble, + IGetAble, + IUpdateAble, + IDeleteAble +{ +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Contract.Service/Interface/ILaundryStoreService.cs b/src/SWD-Laundry-Backend.Contract.Service/Interface/ILaundryStoreService.cs index 239b68a..3ab22f5 100644 --- a/src/SWD-Laundry-Backend.Contract.Service/Interface/ILaundryStoreService.cs +++ b/src/SWD-Laundry-Backend.Contract.Service/Interface/ILaundryStoreService.cs @@ -4,6 +4,10 @@ namespace SWD_Laundry_Backend.Contract.Service.Interface; -public interface ILaundryStoreService : ICreateAble, IGetAble, IUpdateAble, IDeleteAble +public interface ILaundryStoreService : + ICreateAble, + IGetAble, + IUpdateAble, + IDeleteAble { } \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Contract.Service/Interface/IOrderHistoryService.cs b/src/SWD-Laundry-Backend.Contract.Service/Interface/IOrderHistoryService.cs new file mode 100644 index 0000000..7d565ac --- /dev/null +++ b/src/SWD-Laundry-Backend.Contract.Service/Interface/IOrderHistoryService.cs @@ -0,0 +1,13 @@ +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Service.Base_Service_Interface; +using SWD_Laundry_Backend.Core.Models; + +namespace SWD_Laundry_Backend.Contract.Service.Interface; + +public interface IOrderHistoryService : + ICreateAble, + IGetAble, + IUpdateAble, + IDeleteAble +{ +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Contract.Service/Interface/IOrderService.cs b/src/SWD-Laundry-Backend.Contract.Service/Interface/IOrderService.cs new file mode 100644 index 0000000..82bae19 --- /dev/null +++ b/src/SWD-Laundry-Backend.Contract.Service/Interface/IOrderService.cs @@ -0,0 +1,13 @@ +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Service.Base_Service_Interface; +using SWD_Laundry_Backend.Core.Models; + +namespace SWD_Laundry_Backend.Contract.Service.Interface; + +public interface IOrderService : + ICreateAble, + IGetAble, + IUpdateAble, + IDeleteAble +{ +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Contract.Service/Interface/IPaymentService.cs b/src/SWD-Laundry-Backend.Contract.Service/Interface/IPaymentService.cs new file mode 100644 index 0000000..901e450 --- /dev/null +++ b/src/SWD-Laundry-Backend.Contract.Service/Interface/IPaymentService.cs @@ -0,0 +1,13 @@ +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Service.Base_Service_Interface; +using SWD_Laundry_Backend.Core.Models; + +namespace SWD_Laundry_Backend.Contract.Service.Interface; + +public interface IPaymentService : + ICreateAble, + IGetAble, + IUpdateAble, + IDeleteAble +{ +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Contract.Service/Interface/IStaffService.cs b/src/SWD-Laundry-Backend.Contract.Service/Interface/IStaffService.cs new file mode 100644 index 0000000..b2f8475 --- /dev/null +++ b/src/SWD-Laundry-Backend.Contract.Service/Interface/IStaffService.cs @@ -0,0 +1,12 @@ +using SWD_Laundry_Backend.Contract.Service.Base_Service_Interface; +using SWD_Laundry_Backend.Core.Models; + +namespace SWD_Laundry_Backend.Contract.Service.Interface; + +public interface IStaffService : + ICreateAble, + IGetAble, + IUpdateAble, + IDeleteAble +{ +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Contract.Service/Interface/ITransactionService.cs b/src/SWD-Laundry-Backend.Contract.Service/Interface/ITransactionService.cs index 0d830a0..9e72169 100644 --- a/src/SWD-Laundry-Backend.Contract.Service/Interface/ITransactionService.cs +++ b/src/SWD-Laundry-Backend.Contract.Service/Interface/ITransactionService.cs @@ -7,6 +7,7 @@ namespace SWD_Laundry_Backend.Contract.Service.Interface; public interface ITransactionService : ICreateAble, IGetAble, - IUpdateAble + IUpdateAble, + IDeleteAble { } \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Core/Models/CustomerModel.cs b/src/SWD-Laundry-Backend.Core/Models/CustomerModel.cs new file mode 100644 index 0000000..4411663 --- /dev/null +++ b/src/SWD-Laundry-Backend.Core/Models/CustomerModel.cs @@ -0,0 +1,7 @@ +namespace SWD_Laundry_Backend.Core.Models; + +public class CustomerModel +{ + public string? BuildingId { get; set; } + public string? ApplicationUserId { get; set; } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Core/Models/OrderModel.cs b/src/SWD-Laundry-Backend.Core/Models/OrderModel.cs index 871a80d..b9c9419 100644 --- a/src/SWD-Laundry-Backend.Core/Models/OrderModel.cs +++ b/src/SWD-Laundry-Backend.Core/Models/OrderModel.cs @@ -7,14 +7,13 @@ public class OrderModel public DateTime OrderDate { get; set; } public TimeFrame DeliveryTimeFrame { get; set; } public DateTime ExpectedFinishDate { get; set; } + public OrderType OrderType { get; set; } + public PaymentType PaymentType { get; set; } public string? Address { get; set; } public short Amount { get; set; } public double TotalPrice { get; set; } - public string? CustomerName { get; set; } - public string? StaffName { get; set; } - public string? LaundryStoreName { get; set; } - - public int OrderType { get; set; } - public int PaymentType { get; set; } + public string? CustomerId { get; set; } + public string? StaffId { get; set; } + public string? LaundryStoreId { get; set; } } \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Core/Models/StaffModel.cs b/src/SWD-Laundry-Backend.Core/Models/StaffModel.cs index 685b8d6..f147474 100644 --- a/src/SWD-Laundry-Backend.Core/Models/StaffModel.cs +++ b/src/SWD-Laundry-Backend.Core/Models/StaffModel.cs @@ -1,12 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +namespace SWD_Laundry_Backend.Core.Models; -namespace SWD_Laundry_Backend.Core.Models; public class StaffModel { - public string? Name { get; set; } - public string? WalletBalance { get; set; } -} + public string? ApplicationUserId { get; set; } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Repository/Repository/CustomerRepository.cs b/src/SWD-Laundry-Backend.Repository/Repository/CustomerRepository.cs new file mode 100644 index 0000000..4800ee4 --- /dev/null +++ b/src/SWD-Laundry-Backend.Repository/Repository/CustomerRepository.cs @@ -0,0 +1,16 @@ +using Invedia.DI.Attributes; +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Repository.Infrastructure; +using SWD_Laundry_Backend.Contract.Repository.Interface; +using SWD_Laundry_Backend.Repository.Infrastructure; + +namespace SWD_Laundry_Backend.Repository.Repository; + +[ScopedDependency(ServiceType = typeof(ICustomerRepository))] +public class CustomerRepository : Repository, ICustomerRepository +{ + public CustomerRepository(AppDbContext dbContext, ICacheLayer cacheLayer) : base(dbContext, cacheLayer) + + { + } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Repository/Repository/OrderHistoryRepository.cs b/src/SWD-Laundry-Backend.Repository/Repository/OrderHistoryRepository.cs new file mode 100644 index 0000000..139f25b --- /dev/null +++ b/src/SWD-Laundry-Backend.Repository/Repository/OrderHistoryRepository.cs @@ -0,0 +1,15 @@ +using Invedia.DI.Attributes; +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Repository.Infrastructure; +using SWD_Laundry_Backend.Contract.Repository.Interface; +using SWD_Laundry_Backend.Repository.Infrastructure; + +namespace SWD_Laundry_Backend.Repository.Repository; + +[ScopedDependency(ServiceType = typeof(IOrderHistoryRepository))] +public class OrderHistoryRepository : Repository, IOrderHistoryRepository +{ + public OrderHistoryRepository(AppDbContext dbContext, ICacheLayer cacheLayer) : base(dbContext, cacheLayer) + { + } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Repository/Repository/OrderRepository.cs b/src/SWD-Laundry-Backend.Repository/Repository/OrderRepository.cs new file mode 100644 index 0000000..f29f822 --- /dev/null +++ b/src/SWD-Laundry-Backend.Repository/Repository/OrderRepository.cs @@ -0,0 +1,15 @@ +using Invedia.DI.Attributes; +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Repository.Infrastructure; +using SWD_Laundry_Backend.Contract.Repository.Interface; +using SWD_Laundry_Backend.Repository.Infrastructure; + +namespace SWD_Laundry_Backend.Repository.Repository; + +[ScopedDependency(ServiceType = typeof(IOrderRepository))] +public class OrderRepository : Repository, IOrderRepository +{ + public OrderRepository(AppDbContext dbContext, ICacheLayer cacheLayer) : base(dbContext, cacheLayer) + { + } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Repository/Repository/PaymentRepository.cs b/src/SWD-Laundry-Backend.Repository/Repository/PaymentRepository.cs new file mode 100644 index 0000000..2c12fb4 --- /dev/null +++ b/src/SWD-Laundry-Backend.Repository/Repository/PaymentRepository.cs @@ -0,0 +1,15 @@ +using Invedia.DI.Attributes; +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Repository.Infrastructure; +using SWD_Laundry_Backend.Contract.Repository.Interface; +using SWD_Laundry_Backend.Repository.Infrastructure; + +namespace SWD_Laundry_Backend.Repository.Repository; + +[ScopedDependency(ServiceType = typeof(IPaymentRepository))] +public class PaymentRepository : Repository, IPaymentRepository +{ + public PaymentRepository(AppDbContext dbContext, ICacheLayer cacheLayer) : base(dbContext, cacheLayer) + { + } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Repository/Repository/StaffRepository.cs b/src/SWD-Laundry-Backend.Repository/Repository/StaffRepository.cs new file mode 100644 index 0000000..1e052d2 --- /dev/null +++ b/src/SWD-Laundry-Backend.Repository/Repository/StaffRepository.cs @@ -0,0 +1,14 @@ +using Invedia.DI.Attributes; +using SWD_Laundry_Backend.Contract.Repository.Infrastructure; +using SWD_Laundry_Backend.Contract.Repository.Interface; +using SWD_Laundry_Backend.Repository.Infrastructure; + +namespace SWD_Laundry_Backend.Repository.Repository; + +[ScopedDependency(ServiceType = typeof(IStaffRepository))] +public class StaffRepository : Repository, IStaffRepository +{ + public StaffRepository(AppDbContext dbContext, ICacheLayer cacheLayer) : base(dbContext, cacheLayer) + { + } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Service/Services/CustomerService.cs b/src/SWD-Laundry-Backend.Service/Services/CustomerService.cs new file mode 100644 index 0000000..a4947e2 --- /dev/null +++ b/src/SWD-Laundry-Backend.Service/Services/CustomerService.cs @@ -0,0 +1,59 @@ +using AutoMapper; +using Invedia.DI.Attributes; +using Microsoft.EntityFrameworkCore; +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Repository.Interface; +using SWD_Laundry_Backend.Contract.Service.Interface; +using SWD_Laundry_Backend.Core.Models; + +namespace SWD_Laundry_Backend.Service.Services; + +[ScopedDependency(ServiceType = typeof(ICustomerService))] +public class CustomerService : ICustomerService +{ + private readonly ICustomerRepository _repository; + private readonly IMapper _mapper; + + public CustomerService(ICustomerRepository repository, IMapper mapper) + { + _repository = repository; + _mapper = mapper; + } + + public async Task CreateAsync(CustomerModel model, CancellationToken cancellationToken = default) + { + var query = await _repository.AddAsync(_mapper.Map(model), cancellationToken); + var objectId = query.Id; + return objectId; + } + + public async Task DeleteAsync(string id, CancellationToken cancellationToken = default) + { + var numberOfRows = await _repository.DeleteAsync(x => x.Id == id, cancellationToken: cancellationToken); + return numberOfRows; + } + + public async Task> GetAllAsync(CancellationToken cancellationToken = default) + { + var list = await _repository.GetAsync(cancellationToken: cancellationToken); + return await list.ToListAsync(cancellationToken); + } + + public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) + { + var query = await _repository.GetAsync(c => c.Id == id, cancellationToken); + var obj = await query.FirstOrDefaultAsync(); + return obj; + } + + public async Task UpdateAsync(string id, CustomerModel model, CancellationToken cancellationToken = default) + { + var numberOfRows = await _repository.UpdateAsync(x => x.Id == id, + x => x + .SetProperty(x => x.BuildingID, model.BuildingId) + .SetProperty(x => x.ApplicationUserID, model.ApplicationUserId) + , cancellationToken); + + return numberOfRows; + } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Service/Services/LaundryStoreService.cs b/src/SWD-Laundry-Backend.Service/Services/LaundryStoreService.cs index 99e3865..36110f1 100644 --- a/src/SWD-Laundry-Backend.Service/Services/LaundryStoreService.cs +++ b/src/SWD-Laundry-Backend.Service/Services/LaundryStoreService.cs @@ -28,9 +28,10 @@ public async Task CreateAsync(LaundryStoreModel model, CancellationToken return objectId; } - public Task DeleteAsync(string id, CancellationToken cancellationToken = default) + public async Task DeleteAsync(string id, CancellationToken cancellationToken = default) { - throw new NotImplementedException(); + var numberOfRows = await _repository.DeleteAsync(x => x.Id == id, cancellationToken: cancellationToken); + return numberOfRows; } public async Task> GetAllAsync(CancellationToken cancellationToken = default) diff --git a/src/SWD-Laundry-Backend.Service/Services/OrderHistoryService.cs b/src/SWD-Laundry-Backend.Service/Services/OrderHistoryService.cs new file mode 100644 index 0000000..e712875 --- /dev/null +++ b/src/SWD-Laundry-Backend.Service/Services/OrderHistoryService.cs @@ -0,0 +1,63 @@ +using AutoMapper; +using Invedia.DI.Attributes; +using Microsoft.EntityFrameworkCore; +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Repository.Interface; +using SWD_Laundry_Backend.Contract.Service.Interface; +using SWD_Laundry_Backend.Core.Models; + +namespace SWD_Laundry_Backend.Service.Services; + +[ScopedDependency(ServiceType = typeof(IOrderHistoryService))] +public class OrderHistoryService : IOrderHistoryService +{ + private readonly IOrderHistoryRepository _repository; + private readonly IMapper _mapper; + + public OrderHistoryService(IOrderHistoryRepository repository, IMapper mapper) + { + _repository = repository; + _mapper = mapper; + } + + public async Task CreateAsync(OrderHistoryModel model, CancellationToken cancellationToken = default) + { + var query = await _repository.AddAsync(_mapper.Map(model), cancellationToken); + var objectId = query.Id; + return objectId; + } + + public async Task DeleteAsync(string id, CancellationToken cancellationToken = default) + { + var numberOfRows = await _repository.DeleteAsync(x => x.Id == id, cancellationToken: cancellationToken); + return numberOfRows; + } + + public async Task> GetAllAsync(CancellationToken cancellationToken = default) + { + var list = await _repository.GetAsync(cancellationToken: cancellationToken); + return await list.ToListAsync(cancellationToken); + } + + public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) + { + var query = await _repository.GetAsync(c => c.Id == id, cancellationToken); + var obj = await query.FirstOrDefaultAsync(); + return obj; + } + + public async Task UpdateAsync(string id, OrderHistoryModel model, CancellationToken cancellationToken = default) + { + var numberOfRows = await _repository.UpdateAsync(x => x.Id == id, + x => x + .SetProperty(x => x.Message, model.Message) + .SetProperty(x => x.Title, model.Title) + .SetProperty(x => x.OrderStatus, model.OrderStatus) + .SetProperty(x => x.DeliveryStatus, model.DeliveryStatus) + .SetProperty(x => x.LaundryStatus, model.LaundryStatus) + + , cancellationToken); + + return numberOfRows; + } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Service/Services/OrderService.cs b/src/SWD-Laundry-Backend.Service/Services/OrderService.cs new file mode 100644 index 0000000..f9a9699 --- /dev/null +++ b/src/SWD-Laundry-Backend.Service/Services/OrderService.cs @@ -0,0 +1,68 @@ +using AutoMapper; +using Invedia.DI.Attributes; +using Microsoft.EntityFrameworkCore; +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Repository.Interface; +using SWD_Laundry_Backend.Contract.Service.Interface; +using SWD_Laundry_Backend.Core.Models; + +namespace SWD_Laundry_Backend.Service.Services; + +[ScopedDependency(ServiceType = typeof(IOrderService))] +public class OrderService : IOrderService +{ + private readonly IOrderRepository _repository; + private readonly IMapper _mapper; + + public OrderService(IOrderRepository repository, IMapper mapper) + { + _repository = repository; + _mapper = mapper; + } + + public async Task CreateAsync(OrderModel model, CancellationToken cancellationToken = default) + { + var query = await _repository.AddAsync(_mapper.Map(model), cancellationToken); + var objectId = query.Id; + return objectId; + } + + public async Task DeleteAsync(string id, CancellationToken cancellationToken = default) + { + var numberOfRows = await _repository.DeleteAsync(x => x.Id == id, cancellationToken: cancellationToken); + return numberOfRows; + } + + public async Task> GetAllAsync(CancellationToken cancellationToken = default) + { + var list = await _repository.GetAsync(cancellationToken: cancellationToken); + return await list.ToListAsync(cancellationToken); + } + + public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) + { + var query = await _repository.GetAsync(c => c.Id == id, cancellationToken); + var obj = await query.FirstOrDefaultAsync(); + return obj; + } + + public async Task UpdateAsync(string id, OrderModel model, CancellationToken cancellationToken = default) + { + var numberOfRows = await _repository.UpdateAsync(x => x.Id == id, + x => x + .SetProperty(x => x.OrderDate, model.OrderDate) + .SetProperty(x => x.DeliveryTimeFrame, model.DeliveryTimeFrame) + .SetProperty(x => x.ExpectedFinishDate, model.ExpectedFinishDate) + .SetProperty(x => x.OrderType, model.OrderType) + .SetProperty(x => x.PaymentType, model.PaymentType) + .SetProperty(x => x.Address, model.Address) + .SetProperty(x => x.Amount, model.Amount) + .SetProperty(x => x.TotalPrice, model.TotalPrice) + .SetProperty(x => x.CustomerID, model.CustomerId) + .SetProperty(x => x.StaffID, model.StaffId) + .SetProperty(x => x.LaundryStoreID, model.LaundryStoreId) + , cancellationToken); + + return numberOfRows; + } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Service/Services/PaymentService.cs b/src/SWD-Laundry-Backend.Service/Services/PaymentService.cs new file mode 100644 index 0000000..6fd25ed --- /dev/null +++ b/src/SWD-Laundry-Backend.Service/Services/PaymentService.cs @@ -0,0 +1,60 @@ +using AutoMapper; +using Invedia.DI.Attributes; +using Microsoft.EntityFrameworkCore; +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Repository.Interface; +using SWD_Laundry_Backend.Contract.Service.Interface; +using SWD_Laundry_Backend.Core.Models; + +namespace SWD_Laundry_Backend.Service.Services; + +[ScopedDependency(ServiceType = typeof(IPaymentService))] +public class PaymentService : IPaymentService +{ + private readonly IPaymentRepository _repository; + private readonly IMapper _mapper; + + public PaymentService(IPaymentRepository repository, IMapper mapper) + { + _repository = repository; + _mapper = mapper; + } + + public async Task CreateAsync(PaymentModel model, CancellationToken cancellationToken = default) + { + var query = await _repository.AddAsync(_mapper.Map(model), cancellationToken); + var objectId = query.Id; + return objectId; + } + + public async Task DeleteAsync(string id, CancellationToken cancellationToken = default) + { + var numberOfRows = await _repository.DeleteAsync(x => x.Id == id, cancellationToken: cancellationToken); + return numberOfRows; + } + + public async Task> GetAllAsync(CancellationToken cancellationToken = default) + { + var list = await _repository.GetAsync(cancellationToken: cancellationToken); + return await list.ToListAsync(cancellationToken); + } + + public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) + { + var query = await _repository.GetAsync(c => c.Id == id, cancellationToken); + var obj = await query.FirstOrDefaultAsync(); + return obj; + } + + public async Task UpdateAsync(string id, PaymentModel model, CancellationToken cancellationToken = default) + { + { + var numberOfRows = await _repository.UpdateAsync(x => x.Id == id, + x => x + .SetProperty(x => x.Price, model.Price) + , cancellationToken); + + return numberOfRows; + } + } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Service/Services/StaffService.cs b/src/SWD-Laundry-Backend.Service/Services/StaffService.cs new file mode 100644 index 0000000..9d53d36 --- /dev/null +++ b/src/SWD-Laundry-Backend.Service/Services/StaffService.cs @@ -0,0 +1,58 @@ +using AutoMapper; +using Invedia.DI.Attributes; +using Microsoft.EntityFrameworkCore; +using SWD_Laundry_Backend.Contract.Repository.Interface; +using SWD_Laundry_Backend.Contract.Service.Interface; +using SWD_Laundry_Backend.Core.Models; + +namespace SWD_Laundry_Backend.Service.Services; + +[ScopedDependency(ServiceType = typeof(IStaffService))] +public class StaffService : IStaffService +{ + private readonly IStaffRepository _repository; + private readonly IMapper _mapper; + + public StaffService(IStaffRepository repository, IMapper mapper) + { + _repository = repository; + _mapper = mapper; + } + + public async Task CreateAsync(StaffModel model, CancellationToken cancellationToken = default) + { + var query = await _repository.AddAsync(_mapper.Map(model), cancellationToken); + var objectId = query.Id; + return objectId; + } + + public async Task DeleteAsync(string id, CancellationToken cancellationToken = default) + { + var numberOfRows = await _repository.DeleteAsync(x => x.Id == id, cancellationToken: cancellationToken); + return numberOfRows; + } + + public async Task> GetAllAsync(CancellationToken cancellationToken = default) + { + var list = await _repository.GetAsync(cancellationToken: cancellationToken); + return await list.ToListAsync(cancellationToken); + } + + public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) + { + var query = await _repository.GetAsync(c => c.Id == id, cancellationToken); + var obj = await query.FirstOrDefaultAsync(); + return obj; + } + + public async Task UpdateAsync(string id, StaffModel model, CancellationToken cancellationToken = default) + { + var numberOfRows = await _repository.UpdateAsync(x => x.Id == id, + x => x + .SetProperty(x => x.ApplicationUserID, model.ApplicationUserId) + + , cancellationToken); + + return numberOfRows; + } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend.Service/Services/TransactionService.cs b/src/SWD-Laundry-Backend.Service/Services/TransactionService.cs index 663f39f..4f7a11f 100644 --- a/src/SWD-Laundry-Backend.Service/Services/TransactionService.cs +++ b/src/SWD-Laundry-Backend.Service/Services/TransactionService.cs @@ -27,6 +27,12 @@ public async Task CreateAsync(TransactionModel model, CancellationToken return objectId; } + public async Task DeleteAsync(string id, CancellationToken cancellationToken = default) + { + var numberOfRows = await _repository.DeleteAsync(x => x.Id == id, cancellationToken: cancellationToken); + return numberOfRows; + } + public async Task> GetAllAsync(CancellationToken cancellationToken = default) { var list = await _repository.GetAsync(cancellationToken: cancellationToken); diff --git a/src/SWD-Laundry-Backend/Controllers/CustomerController.cs b/src/SWD-Laundry-Backend/Controllers/CustomerController.cs new file mode 100644 index 0000000..f720393 --- /dev/null +++ b/src/SWD-Laundry-Backend/Controllers/CustomerController.cs @@ -0,0 +1,118 @@ +using Microsoft.AspNetCore.Mvc; +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Service.Interface; +using SWD_Laundry_Backend.Core.Models; +using SWD_Laundry_Backend.Service.Services; + +namespace SWD_Laundry_Backend.Controllers; + +[ApiController] +public class CustomerController : ApiControllerBase +{ + private readonly ICustomerService _service; + + public CustomerController(ICustomerService service) + { + _service = service; + } + + [HttpGet] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task GetAll() + { + try + { + var result = await _service.GetAllAsync(); + return Ok(new BaseResponseModel?>(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpGet("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task GetById(string id) + { + try + { + var result = await _service.GetByIdAsync(id); + if (result == null) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpPost] + [ProducesResponseType(StatusCodes.Status201Created)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Create(CustomerModel model) + { + try + { + var result = await _service.CreateAsync(model); + return Ok(new BaseResponseModel(StatusCodes.Status201Created, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpPut("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Update(string id, CustomerModel model) + { + try + { + var result = await _service.UpdateAsync(id, model); + if (result == 0) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpDelete("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Delete(string id) + { + try + { + var result = await _service.DeleteAsync(id); + if (result == 0) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } +} diff --git a/src/SWD-Laundry-Backend/Controllers/LaundryStoreController.cs b/src/SWD-Laundry-Backend/Controllers/LaundryStoreController.cs index 7606d51..66f427c 100644 --- a/src/SWD-Laundry-Backend/Controllers/LaundryStoreController.cs +++ b/src/SWD-Laundry-Backend/Controllers/LaundryStoreController.cs @@ -20,7 +20,7 @@ public LaundryStoreController(ILaundryStoreService service) [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesDefaultResponseType] - public async Task ViewLaundryStoreList() + public async Task GetAll() { try { @@ -38,7 +38,7 @@ public async Task ViewLaundryStoreList() [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesDefaultResponseType] - public async Task ViewLaundryStoreInformation(string id) + public async Task GetById(string id) { try { @@ -79,7 +79,7 @@ public async Task Create(LaundryStoreModel model) [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] [ProducesDefaultResponseType] - public async Task EditLaundryStoreInformation(string id, LaundryStoreModel model) + public async Task Update(string id, LaundryStoreModel model) { try { @@ -95,4 +95,26 @@ public async Task EditLaundryStoreInformation(string id, LaundryS return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); } } + + [HttpDelete("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Delete(string id) + { + try + { + var result = await _service.DeleteAsync(id); + if (result == 0) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } } diff --git a/src/SWD-Laundry-Backend/Controllers/OrderController.cs b/src/SWD-Laundry-Backend/Controllers/OrderController.cs new file mode 100644 index 0000000..6cffb2a --- /dev/null +++ b/src/SWD-Laundry-Backend/Controllers/OrderController.cs @@ -0,0 +1,119 @@ +using Microsoft.AspNetCore.Mvc; +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Service.Interface; +using SWD_Laundry_Backend.Core.Models; + +namespace SWD_Laundry_Backend.Controllers; + +[ApiController] +public class OrderController : ApiControllerBase +{ + private readonly IOrderService _service; + + public OrderController(IOrderService service) + { + _service = service; + } + + [HttpGet] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task GetAll() + { + try + { + var result = await _service.GetAllAsync(); + return Ok(new BaseResponseModel?>(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpGet("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task GetById(string id) + { + try + { + var result = await _service.GetByIdAsync(id); + if (result == null) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpPost] + [ProducesResponseType(StatusCodes.Status201Created)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Create(OrderModel model) + { + try + { + var result = await _service.CreateAsync(model); + return Ok(new BaseResponseModel + (StatusCodes.Status201Created, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel + (StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpPut("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Update(string id, OrderModel model) + { + try + { + var result = await _service.UpdateAsync(id, model); + if (result == 0) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpDelete("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Delete(string id) + { + try + { + var result = await _service.DeleteAsync(id); + if (result == 0) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend/Controllers/OrderHistoryController.cs b/src/SWD-Laundry-Backend/Controllers/OrderHistoryController.cs new file mode 100644 index 0000000..b445e79 --- /dev/null +++ b/src/SWD-Laundry-Backend/Controllers/OrderHistoryController.cs @@ -0,0 +1,119 @@ +using Microsoft.AspNetCore.Mvc; +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Service.Interface; +using SWD_Laundry_Backend.Core.Models; + +namespace SWD_Laundry_Backend.Controllers; + +[ApiController] +public class OrderHistoryController : ApiControllerBase +{ + private readonly IOrderHistoryService _service; + + public OrderHistoryController(IOrderHistoryService service) + { + _service = service; + } + + [HttpGet] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task GetAll() + { + try + { + var result = await _service.GetAllAsync(); + return Ok(new BaseResponseModel?>(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpGet("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task GetById(string id) + { + try + { + var result = await _service.GetByIdAsync(id); + if (result == null) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpPost] + [ProducesResponseType(StatusCodes.Status201Created)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Create(OrderHistoryModel model) + { + try + { + var result = await _service.CreateAsync(model); + return Ok(new BaseResponseModel + (StatusCodes.Status201Created, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel + (StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpPut("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Update(string id, OrderHistoryModel model) + { + try + { + var result = await _service.UpdateAsync(id, model); + if (result == 0) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpDelete("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Delete(string id) + { + try + { + var result = await _service.DeleteAsync(id); + if (result == 0) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } +} diff --git a/src/SWD-Laundry-Backend/Controllers/PaymentController.cs b/src/SWD-Laundry-Backend/Controllers/PaymentController.cs new file mode 100644 index 0000000..1379aa9 --- /dev/null +++ b/src/SWD-Laundry-Backend/Controllers/PaymentController.cs @@ -0,0 +1,121 @@ +using Microsoft.AspNetCore.Mvc; +using SWD_Laundry_Backend.Contract.Repository.Entity; +using SWD_Laundry_Backend.Contract.Repository.Interface; +using SWD_Laundry_Backend.Contract.Service.Interface; +using SWD_Laundry_Backend.Core.Models; +using SWD_Laundry_Backend.Service.Base_Service; + +namespace SWD_Laundry_Backend.Controllers; + +[ApiController] +public class PaymentController : ApiControllerBase +{ + private readonly IPaymentService _service; + + public PaymentController(IPaymentService service) + { + _service = service; + } + + [HttpGet] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task GetAll() + { + try + { + var result = await _service.GetAllAsync(); + return Ok(new BaseResponseModel?>(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpGet("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task GetById(string id) + { + try + { + var result = await _service.GetByIdAsync(id); + if (result == null) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpPost] + [ProducesResponseType(StatusCodes.Status201Created)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Create(PaymentModel model) + { + try + { + var result = await _service.CreateAsync(model); + return Ok(new BaseResponseModel + (StatusCodes.Status201Created, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel + (StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpPut("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Update(string id, PaymentModel model) + { + try + { + var result = await _service.UpdateAsync(id, model); + if (result == 0) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpDelete("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Delete(string id) + { + try + { + var result = await _service.DeleteAsync(id); + if (result == 0) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } +} diff --git a/src/SWD-Laundry-Backend/Controllers/StaffController.cs b/src/SWD-Laundry-Backend/Controllers/StaffController.cs new file mode 100644 index 0000000..b0dfc23 --- /dev/null +++ b/src/SWD-Laundry-Backend/Controllers/StaffController.cs @@ -0,0 +1,118 @@ +using Microsoft.AspNetCore.Mvc; +using SWD_Laundry_Backend.Contract.Service.Interface; +using SWD_Laundry_Backend.Core.Models; + +namespace SWD_Laundry_Backend.Controllers; + +[ApiController] +public class StaffController : ApiControllerBase +{ + private readonly IStaffService _service; + + public StaffController(IStaffService service) + { + _service = service; + } + + [HttpGet] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task GetAll() + { + try + { + var result = await _service.GetAllAsync(); + return Ok(new BaseResponseModel?>(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpGet("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task GetById(string id) + { + try + { + var result = await _service.GetByIdAsync(id); + if (result == null) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpPost] + [ProducesResponseType(StatusCodes.Status201Created)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Create(StaffModel model) + { + try + { + var result = await _service.CreateAsync(model); + return Ok(new BaseResponseModel + (StatusCodes.Status201Created, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel + (StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpPut("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Update(string id, StaffModel model) + { + try + { + var result = await _service.UpdateAsync(id, model); + if (result == 0) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } + + [HttpDelete("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Delete(string id) + { + try + { + var result = await _service.DeleteAsync(id); + if (result == 0) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } +} \ No newline at end of file diff --git a/src/SWD-Laundry-Backend/Controllers/StaffTripController.cs b/src/SWD-Laundry-Backend/Controllers/StaffTripController.cs index 256e3a9..85e6316 100644 --- a/src/SWD-Laundry-Backend/Controllers/StaffTripController.cs +++ b/src/SWD-Laundry-Backend/Controllers/StaffTripController.cs @@ -94,4 +94,26 @@ public async Task Update(string id, StaffTripModel model) return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); } } + + [HttpDelete("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Delete(string id) + { + try + { + var result = await _service.DeleteAsync(id); + if (result == 0) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } } diff --git a/src/SWD-Laundry-Backend/Controllers/TimeScheduleController.cs b/src/SWD-Laundry-Backend/Controllers/TimeScheduleController.cs index a382a75..5ab7004 100644 --- a/src/SWD-Laundry-Backend/Controllers/TimeScheduleController.cs +++ b/src/SWD-Laundry-Backend/Controllers/TimeScheduleController.cs @@ -2,6 +2,7 @@ using SWD_Laundry_Backend.Contract.Repository.Entity; using SWD_Laundry_Backend.Contract.Service.Interface; using SWD_Laundry_Backend.Core.Models; +using SWD_Laundry_Backend.Service.Services; namespace SWD_Laundry_Backend.Controllers; @@ -94,4 +95,26 @@ public async Task Update(string id, TimeScheduleModel model) return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); } } + + [HttpDelete("{id}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + [ProducesDefaultResponseType] + public async Task Delete(string id) + { + try + { + var result = await _service.DeleteAsync(id); + if (result == 0) + { + return NotFound(new BaseResponseModel(StatusCodes.Status404NotFound, "Not Found")); + } + return Ok(new BaseResponseModel(StatusCodes.Status200OK, data: result)); + } + catch (Exception e) + { + return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); + } + } } \ No newline at end of file diff --git a/src/SWD-Laundry-Backend/Controllers/WalletController.cs b/src/SWD-Laundry-Backend/Controllers/WalletController.cs index 52d38f9..db4d706 100644 --- a/src/SWD-Laundry-Backend/Controllers/WalletController.cs +++ b/src/SWD-Laundry-Backend/Controllers/WalletController.cs @@ -94,4 +94,6 @@ public async Task Update(string id, WalletModel model) return BadRequest(new BaseResponseModel(StatusCodes.Status500InternalServerError, e.Message)); } } + + } From 5e7fd6788c4a88d20e73db2931c6480ce4f435e0 Mon Sep 17 00:00:00 2001 From: Nero <67089844+k-nero@users.noreply.github.com> Date: Thu, 5 Oct 2023 09:45:38 +0700 Subject: [PATCH 3/5] hot fix enum --- src/SWD-Laundry-Backend.Core/Utils/CoreHelper.cs | 6 +++--- src/SWD-Laundry-Backend.Core/ValueObject/EnumObject.cs | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/SWD-Laundry-Backend.Core/Utils/CoreHelper.cs b/src/SWD-Laundry-Backend.Core/Utils/CoreHelper.cs index 0e275a7..8160421 100644 --- a/src/SWD-Laundry-Backend.Core/Utils/CoreHelper.cs +++ b/src/SWD-Laundry-Backend.Core/Utils/CoreHelper.cs @@ -8,8 +8,8 @@ namespace SWD_Laundry_Backend.Core.Utils; public static class CoreHelper { - private static IHttpContextAccessor? _contextAccessor; - public static HttpContext CurrentHttpContext => Current; + private static readonly IHttpContextAccessor? _contextAccessor; + public static HttpContext? CurrentHttpContext => Current; public static TimeZoneInfo SystemTimeZoneInfo => GetTimeZoneInfo(Formattings.TimeZone); @@ -45,6 +45,6 @@ public static Dictionary GetAllEnums() .Where(t => t.IsEnum) .ToDictionary(t => t.Name, t => System.Enum.GetNames(t) - .Zip(System.Enum.GetValues(t).Cast(), (Key, Value) => new EnumObject(Key, value: Value, ToSentenceCase(Key))).ToArray()); + .Zip(System.Enum.GetValues(t).Cast(), (Key, Value) => new EnumObject(Key, Value, ToSentenceCase(Key))).ToArray()); } } diff --git a/src/SWD-Laundry-Backend.Core/ValueObject/EnumObject.cs b/src/SWD-Laundry-Backend.Core/ValueObject/EnumObject.cs index 5e47dd2..dcea99c 100644 --- a/src/SWD-Laundry-Backend.Core/ValueObject/EnumObject.cs +++ b/src/SWD-Laundry-Backend.Core/ValueObject/EnumObject.cs @@ -2,11 +2,11 @@ public record EnumObject { - public EnumObject(string key, int value, string v) + public EnumObject(string _key, int _value, string _displayName) { - name = key; - value = value; - displayName = v; + name = _key; + value = _value; + displayName = _displayName; } public string name { get; set; } From bd2924634b2c13300809e4e376fdfbf090fb57c0 Mon Sep 17 00:00:00 2001 From: Nero <67089844+k-nero@users.noreply.github.com> Date: Thu, 5 Oct 2023 18:03:18 +0700 Subject: [PATCH 4/5] cancellationtoken --- src/SWD-Laundry-Backend.Service/Services/LaundryStoreService.cs | 2 +- src/SWD-Laundry-Backend.Service/Services/TimeScheduleService.cs | 2 +- src/SWD-Laundry-Backend.Service/Services/TransactionService.cs | 2 +- src/SWD-Laundry-Backend.Service/Services/WalletService.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SWD-Laundry-Backend.Service/Services/LaundryStoreService.cs b/src/SWD-Laundry-Backend.Service/Services/LaundryStoreService.cs index 04424a2..c2eb28b 100644 --- a/src/SWD-Laundry-Backend.Service/Services/LaundryStoreService.cs +++ b/src/SWD-Laundry-Backend.Service/Services/LaundryStoreService.cs @@ -43,7 +43,7 @@ public async Task> GetAllAsync(CancellationToken cance public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) { var query = await _repository.GetAsync(c => c.Id == id, cancellationToken, x => x.ApplicationUser); - var obj = await query.FirstOrDefaultAsync(); + var obj = await query.FirstOrDefaultAsync(cancellationToken: cancellationToken); return obj; } diff --git a/src/SWD-Laundry-Backend.Service/Services/TimeScheduleService.cs b/src/SWD-Laundry-Backend.Service/Services/TimeScheduleService.cs index 46fee3b..e084ea2 100644 --- a/src/SWD-Laundry-Backend.Service/Services/TimeScheduleService.cs +++ b/src/SWD-Laundry-Backend.Service/Services/TimeScheduleService.cs @@ -42,7 +42,7 @@ public async Task> GetAllAsync(CancellationToken cance public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) { var query = await _repository.GetAsync(c => c.Id == id, cancellationToken); - var obj = await query.FirstOrDefaultAsync(); + var obj = await query.FirstOrDefaultAsync(cancellationToken: cancellationToken); return obj; } diff --git a/src/SWD-Laundry-Backend.Service/Services/TransactionService.cs b/src/SWD-Laundry-Backend.Service/Services/TransactionService.cs index 4f7a11f..e2c7fda 100644 --- a/src/SWD-Laundry-Backend.Service/Services/TransactionService.cs +++ b/src/SWD-Laundry-Backend.Service/Services/TransactionService.cs @@ -42,7 +42,7 @@ public async Task> GetAllAsync(CancellationToken cancel public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) { var query = await _repository.GetAsync(c => c.Id == id, cancellationToken); - var obj = await query.FirstOrDefaultAsync(); + var obj = await query.FirstOrDefaultAsync(cancellationToken: cancellationToken); return obj; } diff --git a/src/SWD-Laundry-Backend.Service/Services/WalletService.cs b/src/SWD-Laundry-Backend.Service/Services/WalletService.cs index 5056252..27612b3 100644 --- a/src/SWD-Laundry-Backend.Service/Services/WalletService.cs +++ b/src/SWD-Laundry-Backend.Service/Services/WalletService.cs @@ -42,7 +42,7 @@ public async Task> GetAllAsync(CancellationToken cancellatio public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) { var query = await _repository.GetAsync(c => c.Id == id, cancellationToken); - var obj = await query.FirstOrDefaultAsync(); + var obj = await query.FirstOrDefaultAsync(cancellationToken: cancellationToken); return obj; } From 79fd5b6b3e559886741432cd7ff73a69afac06dc Mon Sep 17 00:00:00 2001 From: Nero <67089844+k-nero@users.noreply.github.com> Date: Thu, 5 Oct 2023 18:29:07 +0700 Subject: [PATCH 5/5] cancellation token --- src/SWD-Laundry-Backend.Service/Services/CustomerService.cs | 2 +- .../Services/OrderHistoryService.cs | 2 +- src/SWD-Laundry-Backend.Service/Services/OrderService.cs | 2 +- src/SWD-Laundry-Backend.Service/Services/PaymentService.cs | 2 +- src/SWD-Laundry-Backend.Service/Services/StaffService.cs | 3 +-- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/SWD-Laundry-Backend.Service/Services/CustomerService.cs b/src/SWD-Laundry-Backend.Service/Services/CustomerService.cs index a4947e2..1adcd59 100644 --- a/src/SWD-Laundry-Backend.Service/Services/CustomerService.cs +++ b/src/SWD-Laundry-Backend.Service/Services/CustomerService.cs @@ -42,7 +42,7 @@ public async Task> GetAllAsync(CancellationToken cancellat public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) { var query = await _repository.GetAsync(c => c.Id == id, cancellationToken); - var obj = await query.FirstOrDefaultAsync(); + var obj = await query.FirstOrDefaultAsync(cancellationToken: cancellationToken); return obj; } diff --git a/src/SWD-Laundry-Backend.Service/Services/OrderHistoryService.cs b/src/SWD-Laundry-Backend.Service/Services/OrderHistoryService.cs index e712875..4f13794 100644 --- a/src/SWD-Laundry-Backend.Service/Services/OrderHistoryService.cs +++ b/src/SWD-Laundry-Backend.Service/Services/OrderHistoryService.cs @@ -42,7 +42,7 @@ public async Task> GetAllAsync(CancellationToken cance public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) { var query = await _repository.GetAsync(c => c.Id == id, cancellationToken); - var obj = await query.FirstOrDefaultAsync(); + var obj = await query.FirstOrDefaultAsync(cancellationToken: cancellationToken); return obj; } diff --git a/src/SWD-Laundry-Backend.Service/Services/OrderService.cs b/src/SWD-Laundry-Backend.Service/Services/OrderService.cs index f9a9699..f6a227b 100644 --- a/src/SWD-Laundry-Backend.Service/Services/OrderService.cs +++ b/src/SWD-Laundry-Backend.Service/Services/OrderService.cs @@ -42,7 +42,7 @@ public async Task> GetAllAsync(CancellationToken cancellation public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) { var query = await _repository.GetAsync(c => c.Id == id, cancellationToken); - var obj = await query.FirstOrDefaultAsync(); + var obj = await query.FirstOrDefaultAsync(cancellationToken: cancellationToken); return obj; } diff --git a/src/SWD-Laundry-Backend.Service/Services/PaymentService.cs b/src/SWD-Laundry-Backend.Service/Services/PaymentService.cs index 6fd25ed..4f9083c 100644 --- a/src/SWD-Laundry-Backend.Service/Services/PaymentService.cs +++ b/src/SWD-Laundry-Backend.Service/Services/PaymentService.cs @@ -42,7 +42,7 @@ public async Task> GetAllAsync(CancellationToken cancellati public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) { var query = await _repository.GetAsync(c => c.Id == id, cancellationToken); - var obj = await query.FirstOrDefaultAsync(); + var obj = await query.FirstOrDefaultAsync(cancellationToken: cancellationToken); return obj; } diff --git a/src/SWD-Laundry-Backend.Service/Services/StaffService.cs b/src/SWD-Laundry-Backend.Service/Services/StaffService.cs index 9d53d36..d229544 100644 --- a/src/SWD-Laundry-Backend.Service/Services/StaffService.cs +++ b/src/SWD-Laundry-Backend.Service/Services/StaffService.cs @@ -41,7 +41,7 @@ public async Task> GetAllAsync(CancellationToken cancellation public async Task GetByIdAsync(string id, CancellationToken cancellationToken = default) { var query = await _repository.GetAsync(c => c.Id == id, cancellationToken); - var obj = await query.FirstOrDefaultAsync(); + var obj = await query.FirstOrDefaultAsync(cancellationToken: cancellationToken); return obj; } @@ -50,7 +50,6 @@ public async Task UpdateAsync(string id, StaffModel model, CancellationToke var numberOfRows = await _repository.UpdateAsync(x => x.Id == id, x => x .SetProperty(x => x.ApplicationUserID, model.ApplicationUserId) - , cancellationToken); return numberOfRows;