From 0c58fa32195f5f42e77d66515793267087dc90a7 Mon Sep 17 00:00:00 2001 From: Kinfey <93169410+kinfey@users.noreply.github.com> Date: Sun, 22 Sep 2024 08:26:22 +0800 Subject: [PATCH] Convert demo folder project to Python Convert the `demo` folder project from C# and .NET to Python. * **Controllers:** - Add `order_controller.py` to handle order-related routes. - Add `payment_controller.py` to handle payment-related routes. - Add `user_controller.py` to handle user-related routes. * **Models:** - Add `order.py` to define the Order model. - Add `order_status.py` to define the OrderStatus model. - Add `payment.py` to define the Payment model. - Add `payment_status.py` to define the PaymentStatus model. - Add `user.py` to define the User model. - Add `user_login_request.py` to define the UserLoginRequest model. - Add `user_login_response.py` to define the UserLoginResponse model. - Add `user_profile.py` to define the UserProfile model. - Add `user_registration_request.py` to define the UserRegistrationRequest model. - Add `user_registration_response.py` to define the UserRegistrationResponse model. * **Data Access:** - Add `db.py` to set up SQLAlchemy database connection. - Add `order_repository.py` to handle order data access. - Add `payment_repository.py` to handle payment data access. - Add `user_repository.py` to handle user data access. * **Services:** - Add `order_service.py` to handle order-related business logic. - Add `payment_service.py` to handle payment-related business logic. - Add `user_service.py` to handle user-related business logic. * **Application Setup:** - Add `app.py` to set up the Flask application and register blueprints. * **Remove C# and .NET files:** - Delete `ChengFenStore.sln`, `ChengFenStore.csproj`, and all C# files in `Controllers`, `Data`, `Models`, and `Services` directories. --- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/kinfey/GitHubCopilotWorkShop?shareId=XXXX-XXXX-XXXX-XXXX). --- demo/ChengFenStore.sln | 21 --- demo/ChengFenStore/ChengFenStore.csproj | 19 --- .../Controllers/OrderController.cs | 60 --------- .../Controllers/OrderControllerTests.cs | 122 ------------------ .../Controllers/PaymentController.cs | 38 ------ .../Controllers/PaymentControllerTests.cs | 71 ---------- .../Controllers/UserController.cs | 56 -------- .../Controllers/UserControllerTests.cs | 119 ----------------- demo/ChengFenStore/Data/AppDbContext.cs | 16 --- demo/ChengFenStore/Data/OrderRepository.cs | 41 ------ demo/ChengFenStore/Data/PaymentRepository.cs | 40 ------ demo/ChengFenStore/Data/UserRepository.cs | 34 ----- demo/ChengFenStore/Models/Order.cs | 12 -- demo/ChengFenStore/Models/OrderStatus.cs | 9 -- demo/ChengFenStore/Models/Payment.cs | 11 -- demo/ChengFenStore/Models/PaymentStatus.cs | 9 -- demo/ChengFenStore/Models/User.cs | 9 -- demo/ChengFenStore/Models/UserLoginRequest.cs | 9 -- .../ChengFenStore/Models/UserLoginResponse.cs | 9 -- demo/ChengFenStore/Models/UserProfile.cs | 9 -- .../Models/UserRegistrationRequest.cs | 10 -- .../Models/UserRegistrationResponse.cs | 9 -- demo/ChengFenStore/Program.cs | 57 -------- demo/ChengFenStore/Services/OrderService.cs | 44 ------- demo/ChengFenStore/Services/PaymentService.cs | 30 ----- demo/ChengFenStore/Services/UserService.cs | 99 -------------- demo/ChengFenStore/app.py | 16 +++ .../controllers/order_controller.py | 24 ++++ .../controllers/payment_controller.py | 14 ++ .../controllers/user_controller.py | 29 +++++ demo/ChengFenStore/data/db.py | 8 ++ demo/ChengFenStore/data/order_repository.py | 13 ++ demo/ChengFenStore/data/payment_repository.py | 13 ++ demo/ChengFenStore/data/user_repository.py | 10 ++ demo/ChengFenStore/models/order.py | 8 ++ demo/ChengFenStore/models/order_status.py | 5 + demo/ChengFenStore/models/payment.py | 7 + demo/ChengFenStore/models/payment_status.py | 5 + demo/ChengFenStore/models/user.py | 5 + .../models/user_login_request.py | 5 + .../models/user_login_response.py | 5 + demo/ChengFenStore/models/user_profile.py | 5 + .../models/user_registration_request.py | 6 + .../models/user_registration_response.py | 5 + demo/ChengFenStore/services/order_service.py | 20 +++ .../ChengFenStore/services/payment_service.py | 12 ++ demo/ChengFenStore/services/user_service.py | 65 ++++++++++ 47 files changed, 280 insertions(+), 963 deletions(-) delete mode 100644 demo/ChengFenStore.sln delete mode 100644 demo/ChengFenStore/ChengFenStore.csproj delete mode 100644 demo/ChengFenStore/Controllers/OrderController.cs delete mode 100644 demo/ChengFenStore/Controllers/OrderControllerTests.cs delete mode 100644 demo/ChengFenStore/Controllers/PaymentController.cs delete mode 100644 demo/ChengFenStore/Controllers/PaymentControllerTests.cs delete mode 100644 demo/ChengFenStore/Controllers/UserController.cs delete mode 100644 demo/ChengFenStore/Controllers/UserControllerTests.cs delete mode 100644 demo/ChengFenStore/Data/AppDbContext.cs delete mode 100644 demo/ChengFenStore/Data/OrderRepository.cs delete mode 100644 demo/ChengFenStore/Data/PaymentRepository.cs delete mode 100644 demo/ChengFenStore/Data/UserRepository.cs delete mode 100644 demo/ChengFenStore/Models/Order.cs delete mode 100644 demo/ChengFenStore/Models/OrderStatus.cs delete mode 100644 demo/ChengFenStore/Models/Payment.cs delete mode 100644 demo/ChengFenStore/Models/PaymentStatus.cs delete mode 100644 demo/ChengFenStore/Models/User.cs delete mode 100644 demo/ChengFenStore/Models/UserLoginRequest.cs delete mode 100644 demo/ChengFenStore/Models/UserLoginResponse.cs delete mode 100644 demo/ChengFenStore/Models/UserProfile.cs delete mode 100644 demo/ChengFenStore/Models/UserRegistrationRequest.cs delete mode 100644 demo/ChengFenStore/Models/UserRegistrationResponse.cs delete mode 100644 demo/ChengFenStore/Program.cs delete mode 100644 demo/ChengFenStore/Services/OrderService.cs delete mode 100644 demo/ChengFenStore/Services/PaymentService.cs delete mode 100644 demo/ChengFenStore/Services/UserService.cs create mode 100644 demo/ChengFenStore/app.py create mode 100644 demo/ChengFenStore/controllers/order_controller.py create mode 100644 demo/ChengFenStore/controllers/payment_controller.py create mode 100644 demo/ChengFenStore/controllers/user_controller.py create mode 100644 demo/ChengFenStore/data/db.py create mode 100644 demo/ChengFenStore/data/order_repository.py create mode 100644 demo/ChengFenStore/data/payment_repository.py create mode 100644 demo/ChengFenStore/data/user_repository.py create mode 100644 demo/ChengFenStore/models/order.py create mode 100644 demo/ChengFenStore/models/order_status.py create mode 100644 demo/ChengFenStore/models/payment.py create mode 100644 demo/ChengFenStore/models/payment_status.py create mode 100644 demo/ChengFenStore/models/user.py create mode 100644 demo/ChengFenStore/models/user_login_request.py create mode 100644 demo/ChengFenStore/models/user_login_response.py create mode 100644 demo/ChengFenStore/models/user_profile.py create mode 100644 demo/ChengFenStore/models/user_registration_request.py create mode 100644 demo/ChengFenStore/models/user_registration_response.py create mode 100644 demo/ChengFenStore/services/order_service.py create mode 100644 demo/ChengFenStore/services/payment_service.py create mode 100644 demo/ChengFenStore/services/user_service.py diff --git a/demo/ChengFenStore.sln b/demo/ChengFenStore.sln deleted file mode 100644 index f1ed4c7..0000000 --- a/demo/ChengFenStore.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31912.275 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChengFenStore", "ChengFenStore\ChengFenStore.csproj", "{8A2F5E1B-5A5B-4D3A-8A2F-5E1B5A5B4D3A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8A2F5E1B-5A5B-4D3A-8A2F-5E1B5A5B4D3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8A2F5E1B-5A5B-4D3A-8A2F-5E1B5A5B4D3A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8A2F5E1B-5A5B-4D3A-8A2F-5E1B5A5B4D3A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8A2F5E1B-5A5B-4D3A-8A2F-5E1B5A5B4D3A}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/demo/ChengFenStore/ChengFenStore.csproj b/demo/ChengFenStore/ChengFenStore.csproj deleted file mode 100644 index 2c625d7..0000000 --- a/demo/ChengFenStore/ChengFenStore.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - net7.0 - enable - enable - - - - - - - - - - - - - diff --git a/demo/ChengFenStore/Controllers/OrderController.cs b/demo/ChengFenStore/Controllers/OrderController.cs deleted file mode 100644 index 5ae6762..0000000 --- a/demo/ChengFenStore/Controllers/OrderController.cs +++ /dev/null @@ -1,60 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using ChengFenStore.Services; -using ChengFenStore.Models; -using Microsoft.AspNetCore.Authorization; - -namespace ChengFenStore.Controllers -{ - [Authorize] - [ApiController] - [Route("api/[controller]")] - public class OrderController : ControllerBase - { - private readonly OrderService _orderService; - - public OrderController(OrderService orderService) - { - _orderService = orderService; - } - - [HttpPost("create")] - public IActionResult CreateOrder([FromBody] Order order) - { - var createdOrder = _orderService.CreateOrder(order); - return CreatedAtAction(nameof(GetOrderById), new { id = createdOrder.OrderId }, createdOrder); - } - - [HttpGet("{id}")] - public IActionResult GetOrderById(int id) - { - var order = _orderService.GetOrderById(id); - if (order == null) - { - return NotFound(); - } - return Ok(order); - } - - [HttpPut("confirm/{id}")] - public IActionResult ConfirmOrder(int id) - { - var order = _orderService.ConfirmOrder(id); - if (order == null) - { - return NotFound(); - } - return Ok(order); - } - - [HttpGet("track/{id}")] - public IActionResult TrackOrder(int id) - { - var order = _orderService.TrackOrder(id); - if (order == null) - { - return NotFound(); - } - return Ok(order); - } - } -} diff --git a/demo/ChengFenStore/Controllers/OrderControllerTests.cs b/demo/ChengFenStore/Controllers/OrderControllerTests.cs deleted file mode 100644 index 8581a21..0000000 --- a/demo/ChengFenStore/Controllers/OrderControllerTests.cs +++ /dev/null @@ -1,122 +0,0 @@ -using Xunit; -using Moq; -using Microsoft.AspNetCore.Mvc; -using ChengFenStore.Controllers; -using ChengFenStore.Services; -using ChengFenStore.Models; - -namespace ChengFenStore.Tests -{ - public class OrderControllerTests - { - private readonly Mock _mockOrderService; - private readonly OrderController _orderController; - - public OrderControllerTests() - { - _mockOrderService = new Mock(); - _orderController = new OrderController(_mockOrderService.Object); - } - - [Fact] - public void CreateOrder_ReturnsCreatedAtActionResult() - { - // Arrange - var order = new Order { OrderId = 1, UserId = 1, ProductDetails = "Product 1", DeliveryMethod = "Delivery", OrderStatus = "Pending" }; - _mockOrderService.Setup(service => service.CreateOrder(order)).Returns(order); - - // Act - var result = _orderController.CreateOrder(order); - - // Assert - var createdAtActionResult = Assert.IsType(result); - Assert.Equal("GetOrderById", createdAtActionResult.ActionName); - Assert.Equal(order.OrderId, createdAtActionResult.RouteValues["id"]); - Assert.Equal(order, createdAtActionResult.Value); - } - - [Fact] - public void GetOrderById_ReturnsOkObjectResult_WhenOrderExists() - { - // Arrange - var order = new Order { OrderId = 1, UserId = 1, ProductDetails = "Product 1", DeliveryMethod = "Delivery", OrderStatus = "Pending" }; - _mockOrderService.Setup(service => service.GetOrderById(order.OrderId)).Returns(order); - - // Act - var result = _orderController.GetOrderById(order.OrderId); - - // Assert - var okObjectResult = Assert.IsType(result); - Assert.Equal(order, okObjectResult.Value); - } - - [Fact] - public void GetOrderById_ReturnsNotFoundResult_WhenOrderDoesNotExist() - { - // Arrange - _mockOrderService.Setup(service => service.GetOrderById(It.IsAny())).Returns((Order)null); - - // Act - var result = _orderController.GetOrderById(1); - - // Assert - Assert.IsType(result); - } - - [Fact] - public void ConfirmOrder_ReturnsOkObjectResult_WhenOrderExists() - { - // Arrange - var order = new Order { OrderId = 1, UserId = 1, ProductDetails = "Product 1", DeliveryMethod = "Delivery", OrderStatus = "Pending" }; - _mockOrderService.Setup(service => service.ConfirmOrder(order.OrderId)).Returns(order); - - // Act - var result = _orderController.ConfirmOrder(order.OrderId); - - // Assert - var okObjectResult = Assert.IsType(result); - Assert.Equal(order, okObjectResult.Value); - } - - [Fact] - public void ConfirmOrder_ReturnsNotFoundResult_WhenOrderDoesNotExist() - { - // Arrange - _mockOrderService.Setup(service => service.ConfirmOrder(It.IsAny())).Returns((Order)null); - - // Act - var result = _orderController.ConfirmOrder(1); - - // Assert - Assert.IsType(result); - } - - [Fact] - public void TrackOrder_ReturnsOkObjectResult_WhenOrderExists() - { - // Arrange - var order = new Order { OrderId = 1, UserId = 1, ProductDetails = "Product 1", DeliveryMethod = "Delivery", OrderStatus = "Pending" }; - _mockOrderService.Setup(service => service.TrackOrder(order.OrderId)).Returns(order); - - // Act - var result = _orderController.TrackOrder(order.OrderId); - - // Assert - var okObjectResult = Assert.IsType(result); - Assert.Equal(order, okObjectResult.Value); - } - - [Fact] - public void TrackOrder_ReturnsNotFoundResult_WhenOrderDoesNotExist() - { - // Arrange - _mockOrderService.Setup(service => service.TrackOrder(It.IsAny())).Returns((Order)null); - - // Act - var result = _orderController.TrackOrder(1); - - // Assert - Assert.IsType(result); - } - } -} diff --git a/demo/ChengFenStore/Controllers/PaymentController.cs b/demo/ChengFenStore/Controllers/PaymentController.cs deleted file mode 100644 index f6654df..0000000 --- a/demo/ChengFenStore/Controllers/PaymentController.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using ChengFenStore.Services; -using ChengFenStore.Models; -using Microsoft.AspNetCore.Authorization; - -namespace ChengFenStore.Controllers -{ - [Authorize] - [ApiController] - [Route("api/[controller]")] - public class PaymentController : ControllerBase - { - private readonly PaymentService _paymentService; - - public PaymentController(PaymentService paymentService) - { - _paymentService = paymentService; - } - - [HttpPost("process")] - public IActionResult ProcessPayment([FromBody] Payment payment) - { - var result = _paymentService.ProcessPayment(payment); - if (result) - { - return Ok(new { message = "Payment processed successfully" }); - } - return BadRequest(new { message = "Payment processing failed" }); - } - - [HttpGet("records")] - public IActionResult GetPaymentRecords() - { - var records = _paymentService.GetPaymentRecords(); - return Ok(records); - } - } -} diff --git a/demo/ChengFenStore/Controllers/PaymentControllerTests.cs b/demo/ChengFenStore/Controllers/PaymentControllerTests.cs deleted file mode 100644 index f24ed06..0000000 --- a/demo/ChengFenStore/Controllers/PaymentControllerTests.cs +++ /dev/null @@ -1,71 +0,0 @@ -using ChengFenStore.Controllers; -using ChengFenStore.Models; -using ChengFenStore.Services; -using Microsoft.AspNetCore.Mvc; -using Moq; -using Xunit; - -namespace ChengFenStore.Tests -{ - public class PaymentControllerTests - { - private readonly Mock _mockPaymentService; - private readonly PaymentController _controller; - - public PaymentControllerTests() - { - _mockPaymentService = new Mock(); - _controller = new PaymentController(_mockPaymentService.Object); - } - - [Fact] - public void ProcessPayment_ReturnsOkResult_WhenPaymentIsProcessed() - { - // Arrange - var payment = new Payment { PaymentId = 1, OrderId = 1, PaymentMethod = "CreditCard", PaymentStatus = "Pending" }; - _mockPaymentService.Setup(service => service.ProcessPayment(payment)).Returns(true); - - // Act - var result = _controller.ProcessPayment(payment); - - // Assert - var okResult = Assert.IsType(result); - Assert.Equal("Payment processed successfully", ((dynamic)okResult.Value).message); - } - - [Fact] - public void ProcessPayment_ReturnsBadRequest_WhenPaymentProcessingFails() - { - // Arrange - var payment = new Payment { PaymentId = 1, OrderId = 1, PaymentMethod = "CreditCard", PaymentStatus = "Pending" }; - _mockPaymentService.Setup(service => service.ProcessPayment(payment)).Returns(false); - - // Act - var result = _controller.ProcessPayment(payment); - - // Assert - var badRequestResult = Assert.IsType(result); - Assert.Equal("Payment processing failed", ((dynamic)badRequestResult.Value).message); - } - - [Fact] - public void GetPaymentRecords_ReturnsOkResult_WithPaymentRecords() - { - // Arrange - var payments = new List - { - new Payment { PaymentId = 1, OrderId = 1, PaymentMethod = "CreditCard", PaymentStatus = "Processed" }, - new Payment { PaymentId = 2, OrderId = 2, PaymentMethod = "PayPal", PaymentStatus = "Processed" } - }; - _mockPaymentService.Setup(service => service.GetPaymentRecords()).Returns(payments); - - // Act - var result = _controller.GetPaymentRecords(); - - // Assert - var okResult = Assert.IsType(result); - var returnedPayments = Assert.IsType>(okResult.Value); - Assert.Equal(2, returnedPayments.Count); - } - } -} diff --git a/demo/ChengFenStore/Controllers/UserController.cs b/demo/ChengFenStore/Controllers/UserController.cs deleted file mode 100644 index c01e89d..0000000 --- a/demo/ChengFenStore/Controllers/UserController.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using ChengFenStore.Services; -using ChengFenStore.Models; -using Microsoft.AspNetCore.Authorization; - -namespace ChengFenStore.Controllers -{ - [ApiController] - [Route("api/[controller]")] - public class UserController : ControllerBase - { - private readonly IUserService _userService; - - public UserController(IUserService userService) - { - _userService = userService; - } - - [AllowAnonymous] - [HttpPost("register")] - public IActionResult Register(UserRegistrationRequest request) - { - var result = _userService.Register(request); - if (result.Success) - { - return Ok(result); - } - return BadRequest(result); - } - - [AllowAnonymous] - [HttpPost("login")] - public IActionResult Login(UserLoginRequest request) - { - var result = _userService.Login(request); - if (result.Success) - { - return Ok(result); - } - return Unauthorized(result); - } - - [Authorize] - [HttpGet("profile")] - public IActionResult GetUserProfile() - { - var userId = User.Identity.Name; - var userProfile = _userService.GetUserProfile(userId); - if (userProfile == null) - { - return NotFound(); - } - return Ok(userProfile); - } - } -} diff --git a/demo/ChengFenStore/Controllers/UserControllerTests.cs b/demo/ChengFenStore/Controllers/UserControllerTests.cs deleted file mode 100644 index f6cff68..0000000 --- a/demo/ChengFenStore/Controllers/UserControllerTests.cs +++ /dev/null @@ -1,119 +0,0 @@ -using ChengFenStore.Controllers; -using ChengFenStore.Models; -using ChengFenStore.Services; -using Microsoft.AspNetCore.Mvc; -using Moq; -using Xunit; - -namespace ChengFenStore.Tests -{ - public class UserControllerTests - { - private readonly Mock _mockUserService; - private readonly UserController _userController; - - public UserControllerTests() - { - _mockUserService = new Mock(); - _userController = new UserController(_mockUserService.Object); - } - - [Fact] - public void Register_ValidRequest_ReturnsOkResult() - { - // Arrange - var request = new UserRegistrationRequest - { - PhoneNumber = "1234567890", - Name = "Test User", - Password = "password" - }; - var response = new UserRegistrationResponse - { - Success = true, - Message = "User registered successfully." - }; - _mockUserService.Setup(service => service.Register(request)).Returns(response); - - // Act - var result = _userController.Register(request); - - // Assert - var okResult = Assert.IsType(result); - Assert.Equal(response, okResult.Value); - } - - [Fact] - public void Register_InvalidRequest_ReturnsBadRequest() - { - // Arrange - var request = new UserRegistrationRequest - { - PhoneNumber = "1234567890", - Name = "Test User", - Password = "password" - }; - var response = new UserRegistrationResponse - { - Success = false, - Message = "User already exists." - }; - _mockUserService.Setup(service => service.Register(request)).Returns(response); - - // Act - var result = _userController.Register(request); - - // Assert - var badRequestResult = Assert.IsType(result); - Assert.Equal(response, badRequestResult.Value); - } - - [Fact] - public void Login_ValidRequest_ReturnsOkResult() - { - // Arrange - var request = new UserLoginRequest - { - PhoneNumber = "1234567890", - Password = "password" - }; - var response = new UserLoginResponse - { - Success = true, - Message = "Login successful." - }; - _mockUserService.Setup(service => service.Login(request)).Returns(response); - - // Act - var result = _userController.Login(request); - - // Assert - var okResult = Assert.IsType(result); - Assert.Equal(response, okResult.Value); - } - - [Fact] - public void Login_InvalidRequest_ReturnsUnauthorizedResult() - { - // Arrange - var request = new UserLoginRequest - { - PhoneNumber = "1234567890", - Password = "password" - }; - var response = new UserLoginResponse - { - Success = false, - Message = "Invalid phone number or password." - }; - _mockUserService.Setup(service => service.Login(request)).Returns(response); - - // Act - var result = _userController.Login(request); - - // Assert - var unauthorizedResult = Assert.IsType(result); - Assert.Equal(response, unauthorizedResult.Value); - } - } -} diff --git a/demo/ChengFenStore/Data/AppDbContext.cs b/demo/ChengFenStore/Data/AppDbContext.cs deleted file mode 100644 index 1ae3667..0000000 --- a/demo/ChengFenStore/Data/AppDbContext.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using ChengFenStore.Models; - -namespace ChengFenStore.Data -{ - public class AppDbContext : DbContext - { - public AppDbContext(DbContextOptions options) : base(options) - { - } - - public DbSet Users { get; set; } - public DbSet Orders { get; set; } - public DbSet Payments { get; set; } - } -} diff --git a/demo/ChengFenStore/Data/OrderRepository.cs b/demo/ChengFenStore/Data/OrderRepository.cs deleted file mode 100644 index a2fa12f..0000000 --- a/demo/ChengFenStore/Data/OrderRepository.cs +++ /dev/null @@ -1,41 +0,0 @@ -using ChengFenStore.Models; -using System.Collections.Generic; -using System.Linq; -using Microsoft.EntityFrameworkCore; - -namespace ChengFenStore.Data -{ - public interface IOrderRepository - { - void AddOrder(Order order); - Order GetOrderById(int orderId); - void UpdateOrder(Order order); - } - - public class OrderRepository : IOrderRepository - { - private readonly AppDbContext _context; - - public OrderRepository(AppDbContext context) - { - _context = context; - } - - public void AddOrder(Order order) - { - _context.Orders.Add(order); - _context.SaveChanges(); - } - - public Order GetOrderById(int orderId) - { - return _context.Orders.FirstOrDefault(o => o.OrderId == orderId); - } - - public void UpdateOrder(Order order) - { - _context.Orders.Update(order); - _context.SaveChanges(); - } - } -} diff --git a/demo/ChengFenStore/Data/PaymentRepository.cs b/demo/ChengFenStore/Data/PaymentRepository.cs deleted file mode 100644 index 7d3f194..0000000 --- a/demo/ChengFenStore/Data/PaymentRepository.cs +++ /dev/null @@ -1,40 +0,0 @@ -using ChengFenStore.Models; -using Microsoft.EntityFrameworkCore; -using System.Collections.Generic; -using System.Linq; - -namespace ChengFenStore.Data -{ - public interface IPaymentRepository - { - void AddPayment(Payment payment); - List GetPayments(); - Payment GetPaymentById(int paymentId); - } - - public class PaymentRepository : IPaymentRepository - { - private readonly AppDbContext _context; - - public PaymentRepository(AppDbContext context) - { - _context = context; - } - - public void AddPayment(Payment payment) - { - _context.Payments.Add(payment); - _context.SaveChanges(); - } - - public List GetPayments() - { - return _context.Payments.ToList(); - } - - public Payment GetPaymentById(int paymentId) - { - return _context.Payments.FirstOrDefault(p => p.PaymentId == paymentId); - } - } -} diff --git a/demo/ChengFenStore/Data/UserRepository.cs b/demo/ChengFenStore/Data/UserRepository.cs deleted file mode 100644 index 899ba0e..0000000 --- a/demo/ChengFenStore/Data/UserRepository.cs +++ /dev/null @@ -1,34 +0,0 @@ -using ChengFenStore.Models; -using System.Collections.Generic; -using System.Linq; -using Microsoft.EntityFrameworkCore; - -namespace ChengFenStore.Data -{ - public interface IUserRepository - { - void AddUser(User user); - User GetUserByPhoneNumber(string phoneNumber); - } - - public class UserRepository : IUserRepository - { - private readonly AppDbContext _context; - - public UserRepository(AppDbContext context) - { - _context = context; - } - - public void AddUser(User user) - { - _context.Users.Add(user); - _context.SaveChanges(); - } - - public User GetUserByPhoneNumber(string phoneNumber) - { - return _context.Users.FirstOrDefault(u => u.PhoneNumber == phoneNumber); - } - } -} diff --git a/demo/ChengFenStore/Models/Order.cs b/demo/ChengFenStore/Models/Order.cs deleted file mode 100644 index d9ae0f9..0000000 --- a/demo/ChengFenStore/Models/Order.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace ChengFenStore.Models -{ - public class Order - { - public int OrderId { get; set; } - public int UserId { get; set; } - public string ProductDetails { get; set; } - public string DeliveryMethod { get; set; } - public string OrderStatus { get; set; } - public List OrderStatusHistory { get; set; } - } -} diff --git a/demo/ChengFenStore/Models/OrderStatus.cs b/demo/ChengFenStore/Models/OrderStatus.cs deleted file mode 100644 index 4bd4d87..0000000 --- a/demo/ChengFenStore/Models/OrderStatus.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ChengFenStore.Models -{ - public class OrderStatus - { - public int OrderId { get; set; } - public string Status { get; set; } - public DateTime Timestamp { get; set; } - } -} diff --git a/demo/ChengFenStore/Models/Payment.cs b/demo/ChengFenStore/Models/Payment.cs deleted file mode 100644 index df04f77..0000000 --- a/demo/ChengFenStore/Models/Payment.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace ChengFenStore.Models -{ - public class Payment - { - public int PaymentId { get; set; } - public int OrderId { get; set; } - public string PaymentMethod { get; set; } - public string PaymentStatus { get; set; } - public List PaymentStatusHistory { get; set; } - } -} diff --git a/demo/ChengFenStore/Models/PaymentStatus.cs b/demo/ChengFenStore/Models/PaymentStatus.cs deleted file mode 100644 index d3d84db..0000000 --- a/demo/ChengFenStore/Models/PaymentStatus.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ChengFenStore.Models -{ - public class PaymentStatus - { - public int PaymentId { get; set; } - public string Status { get; set; } - public DateTime Timestamp { get; set; } - } -} diff --git a/demo/ChengFenStore/Models/User.cs b/demo/ChengFenStore/Models/User.cs deleted file mode 100644 index 60a8f78..0000000 --- a/demo/ChengFenStore/Models/User.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ChengFenStore.Models -{ - public class User - { - public string PhoneNumber { get; set; } - public string Name { get; set; } - public string Password { get; set; } - } -} diff --git a/demo/ChengFenStore/Models/UserLoginRequest.cs b/demo/ChengFenStore/Models/UserLoginRequest.cs deleted file mode 100644 index 9f4465a..0000000 --- a/demo/ChengFenStore/Models/UserLoginRequest.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ChengFenStore.Models -{ - public class UserLoginRequest - { - public string PhoneNumber { get; set; } - public string Password { get; set; } - public string VerificationCode { get; set; } - } -} diff --git a/demo/ChengFenStore/Models/UserLoginResponse.cs b/demo/ChengFenStore/Models/UserLoginResponse.cs deleted file mode 100644 index dab3045..0000000 --- a/demo/ChengFenStore/Models/UserLoginResponse.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ChengFenStore.Models -{ - public class UserLoginResponse - { - public bool Success { get; set; } - public string Message { get; set; } - public string Token { get; set; } - } -} diff --git a/demo/ChengFenStore/Models/UserProfile.cs b/demo/ChengFenStore/Models/UserProfile.cs deleted file mode 100644 index b39490e..0000000 --- a/demo/ChengFenStore/Models/UserProfile.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ChengFenStore.Models -{ - public class UserProfile - { - public string PhoneNumber { get; set; } - public string Name { get; set; } - public List Orders { get; set; } - } -} diff --git a/demo/ChengFenStore/Models/UserRegistrationRequest.cs b/demo/ChengFenStore/Models/UserRegistrationRequest.cs deleted file mode 100644 index 4ab673b..0000000 --- a/demo/ChengFenStore/Models/UserRegistrationRequest.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ChengFenStore.Models -{ - public class UserRegistrationRequest - { - public string PhoneNumber { get; set; } - public string Name { get; set; } - public string Password { get; set; } - public string VerificationCode { get; set; } - } -} diff --git a/demo/ChengFenStore/Models/UserRegistrationResponse.cs b/demo/ChengFenStore/Models/UserRegistrationResponse.cs deleted file mode 100644 index d286426..0000000 --- a/demo/ChengFenStore/Models/UserRegistrationResponse.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace ChengFenStore.Models -{ - public class UserRegistrationResponse - { - public bool Success { get; set; } - public string Message { get; set; } - public string Token { get; set; } - } -} diff --git a/demo/ChengFenStore/Program.cs b/demo/ChengFenStore/Program.cs deleted file mode 100644 index ee96bc8..0000000 --- a/demo/ChengFenStore/Program.cs +++ /dev/null @@ -1,57 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using ChengFenStore.Services; -using ChengFenStore.Data; -using Microsoft.AspNetCore.Authentication.JwtBearer; -using Microsoft.IdentityModel.Tokens; -using System.Text; - -var builder = WebApplication.CreateBuilder(args); - -// Add services to the container. -builder.Services.AddControllers(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); -builder.Services.AddScoped(); - -// Configure database connection -var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); -builder.Services.AddDbContext(options => - options.UseSqlServer(connectionString)); - -// Add authentication and authorization services -builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) - .AddJwtBearer(options => - { - options.TokenValidationParameters = new TokenValidationParameters - { - ValidateIssuer = true, - ValidateAudience = true, - ValidateLifetime = true, - ValidateIssuerSigningKey = true, - ValidIssuer = builder.Configuration["Jwt:Issuer"], - ValidAudience = builder.Configuration["Jwt:Audience"], - IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"])) - }; - }); - -builder.Services.AddAuthorization(); - -var app = builder.Build(); - -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseDeveloperExceptionPage(); -} - -app.UseHttpsRedirection(); - -app.UseAuthentication(); -app.UseAuthorization(); - -app.MapControllers(); - -app.Run(); diff --git a/demo/ChengFenStore/Services/OrderService.cs b/demo/ChengFenStore/Services/OrderService.cs deleted file mode 100644 index 8e6e9ba..0000000 --- a/demo/ChengFenStore/Services/OrderService.cs +++ /dev/null @@ -1,44 +0,0 @@ -using ChengFenStore.Models; -using ChengFenStore.Data; - -namespace ChengFenStore.Services -{ - public class OrderService - { - private readonly AppDbContext _context; - - public OrderService(AppDbContext context) - { - _context = context; - } - - public Order CreateOrder(Order order) - { - _context.Orders.Add(order); - _context.SaveChanges(); - return order; - } - - public Order GetOrderById(int id) - { - return _context.Orders.FirstOrDefault(o => o.OrderId == id); - } - - public Order ConfirmOrder(int id) - { - var order = _context.Orders.FirstOrDefault(o => o.OrderId == id); - if (order != null) - { - order.OrderStatus = "已支付"; - _context.Orders.Update(order); - _context.SaveChanges(); - } - return order; - } - - public Order TrackOrder(int id) - { - return _context.Orders.FirstOrDefault(o => o.OrderId == id); - } - } -} diff --git a/demo/ChengFenStore/Services/PaymentService.cs b/demo/ChengFenStore/Services/PaymentService.cs deleted file mode 100644 index fcadac6..0000000 --- a/demo/ChengFenStore/Services/PaymentService.cs +++ /dev/null @@ -1,30 +0,0 @@ -using ChengFenStore.Models; -using ChengFenStore.Data; - -namespace ChengFenStore.Services -{ - public class PaymentService - { - private readonly AppDbContext _context; - - public PaymentService(AppDbContext context) - { - _context = context; - } - - public bool ProcessPayment(Payment payment) - { - // Implement payment processing logic here - // For example, call external payment gateway API and update payment status - payment.PaymentStatus = "Processed"; - _context.Payments.Add(payment); - _context.SaveChanges(); - return true; - } - - public List GetPaymentRecords() - { - return _context.Payments.ToList(); - } - } -} diff --git a/demo/ChengFenStore/Services/UserService.cs b/demo/ChengFenStore/Services/UserService.cs deleted file mode 100644 index 24cef69..0000000 --- a/demo/ChengFenStore/Services/UserService.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.IdentityModel.Tokens.Jwt; -using System.Security.Claims; -using System.Text; -using ChengFenStore.Data; -using ChengFenStore.Models; -using Microsoft.IdentityModel.Tokens; - -namespace ChengFenStore.Services -{ - public interface IUserService - { - UserRegistrationResponse Register(UserRegistrationRequest request); - UserLoginResponse Login(UserLoginRequest request); - } - - public class UserService : IUserService - { - private readonly IUserRepository _userRepository; - private readonly IConfiguration _configuration; - - public UserService(IUserRepository userRepository, IConfiguration configuration) - { - _userRepository = userRepository; - _configuration = configuration; - } - - public UserRegistrationResponse Register(UserRegistrationRequest request) - { - // Check if user already exists - var existingUser = _userRepository.GetUserByPhoneNumber(request.PhoneNumber); - if (existingUser != null) - { - return new UserRegistrationResponse - { - Success = false, - Message = "User already exists." - }; - } - - // Create new user - var user = new User - { - PhoneNumber = request.PhoneNumber, - Name = request.Name, - Password = request.Password // Note: In a real application, you should hash the password before storing it - }; - - _userRepository.AddUser(user); - - return new UserRegistrationResponse - { - Success = true, - Message = "User registered successfully." - }; - } - - public UserLoginResponse Login(UserLoginRequest request) - { - // Get user by phone number - var user = _userRepository.GetUserByPhoneNumber(request.PhoneNumber); - if (user == null || user.Password != request.Password) // Note: In a real application, you should hash the password and compare the hashes - { - return new UserLoginResponse - { - Success = false, - Message = "Invalid phone number or password." - }; - } - - // Generate JWT token - var token = GenerateJwtToken(user); - - return new UserLoginResponse - { - Success = true, - Message = "Login successful.", - Token = token - }; - } - - private string GenerateJwtToken(User user) - { - var tokenHandler = new JwtSecurityTokenHandler(); - var key = Encoding.ASCII.GetBytes(_configuration["Jwt:Key"]); - var tokenDescriptor = new SecurityTokenDescriptor - { - Subject = new ClaimsIdentity(new[] - { - new Claim(ClaimTypes.Name, user.PhoneNumber) - }), - Expires = DateTime.UtcNow.AddDays(7), - SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) - }; - var token = tokenHandler.CreateToken(tokenDescriptor); - return tokenHandler.WriteToken(token); - } - } -} diff --git a/demo/ChengFenStore/app.py b/demo/ChengFenStore/app.py new file mode 100644 index 0000000..ed25f95 --- /dev/null +++ b/demo/ChengFenStore/app.py @@ -0,0 +1,16 @@ +from flask import Flask +from controllers.order_controller import order_bp +from controllers.payment_controller import payment_bp +from controllers.user_controller import user_bp +from data.db import init_db + +app = Flask(__name__) + +app.register_blueprint(order_bp, url_prefix='/orders') +app.register_blueprint(payment_bp, url_prefix='/payments') +app.register_blueprint(user_bp, url_prefix='/users') + +init_db(app) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/demo/ChengFenStore/controllers/order_controller.py b/demo/ChengFenStore/controllers/order_controller.py new file mode 100644 index 0000000..47864c7 --- /dev/null +++ b/demo/ChengFenStore/controllers/order_controller.py @@ -0,0 +1,24 @@ +from flask import Blueprint, request, jsonify + +order_bp = Blueprint('order', __name__) + +@order_bp.route('/create', methods=['POST']) +def create_order(): + order_data = request.get_json() + # Implement order creation logic here + return jsonify({'message': 'Order created successfully'}), 201 + +@order_bp.route('/', methods=['GET']) +def get_order_by_id(order_id): + # Implement logic to get order by ID here + return jsonify({'order_id': order_id, 'message': 'Order details'}), 200 + +@order_bp.route('/confirm/', methods=['PUT']) +def confirm_order(order_id): + # Implement order confirmation logic here + return jsonify({'order_id': order_id, 'message': 'Order confirmed'}), 200 + +@order_bp.route('/track/', methods=['GET']) +def track_order(order_id): + # Implement order tracking logic here + return jsonify({'order_id': order_id, 'message': 'Order status'}), 200 diff --git a/demo/ChengFenStore/controllers/payment_controller.py b/demo/ChengFenStore/controllers/payment_controller.py new file mode 100644 index 0000000..d76f40c --- /dev/null +++ b/demo/ChengFenStore/controllers/payment_controller.py @@ -0,0 +1,14 @@ +from flask import Blueprint, request, jsonify + +payment_bp = Blueprint('payment', __name__) + +@payment_bp.route('/process', methods=['POST']) +def process_payment(): + payment_data = request.get_json() + # Implement payment processing logic here + return jsonify({'message': 'Payment processed successfully'}), 200 + +@payment_bp.route('/records', methods=['GET']) +def get_payment_records(): + # Implement logic to get payment records here + return jsonify({'records': 'Payment records'}), 200 diff --git a/demo/ChengFenStore/controllers/user_controller.py b/demo/ChengFenStore/controllers/user_controller.py new file mode 100644 index 0000000..c265da3 --- /dev/null +++ b/demo/ChengFenStore/controllers/user_controller.py @@ -0,0 +1,29 @@ +from flask import Blueprint, request, jsonify +from services.user_service import UserService + +user_bp = Blueprint('user', __name__) + +@user_bp.route('/register', methods=['POST']) +def register_user(): + data = request.get_json() + phone_number = data.get('phone_number') + name = data.get('name') + password = data.get('password') + verification_code = data.get('verification_code') + result = UserService.register(phone_number, name, password, verification_code) + return jsonify(result) + +@user_bp.route('/login', methods=['POST']) +def login_user(): + data = request.get_json() + phone_number = data.get('phone_number') + password = data.get('password') + verification_code = data.get('verification_code') + result = UserService.login(phone_number, password, verification_code) + return jsonify(result) + +@user_bp.route('/profile', methods=['GET']) +def get_user_profile(): + phone_number = request.args.get('phone_number') + result = UserService.get_user_profile(phone_number) + return jsonify(result) diff --git a/demo/ChengFenStore/data/db.py b/demo/ChengFenStore/data/db.py new file mode 100644 index 0000000..6a67eb9 --- /dev/null +++ b/demo/ChengFenStore/data/db.py @@ -0,0 +1,8 @@ +from flask_sqlalchemy import SQLAlchemy + +db = SQLAlchemy() + +def init_db(app): + db.init_app(app) + with app.app_context(): + db.create_all() diff --git a/demo/ChengFenStore/data/order_repository.py b/demo/ChengFenStore/data/order_repository.py new file mode 100644 index 0000000..bee8084 --- /dev/null +++ b/demo/ChengFenStore/data/order_repository.py @@ -0,0 +1,13 @@ +from .db import db +from ..models.order import Order + +class OrderRepository: + def add_order(self, order): + db.session.add(order) + db.session.commit() + + def get_order_by_id(self, order_id): + return Order.query.get(order_id) + + def update_order(self, order): + db.session.commit() diff --git a/demo/ChengFenStore/data/payment_repository.py b/demo/ChengFenStore/data/payment_repository.py new file mode 100644 index 0000000..04050ab --- /dev/null +++ b/demo/ChengFenStore/data/payment_repository.py @@ -0,0 +1,13 @@ +class PaymentRepository: + def __init__(self, db): + self.db = db + + def add_payment(self, payment): + self.db.session.add(payment) + self.db.session.commit() + + def get_payment_by_id(self, payment_id): + return self.db.session.query(Payment).filter_by(payment_id=payment_id).first() + + def update_payment(self, payment): + self.db.session.commit() diff --git a/demo/ChengFenStore/data/user_repository.py b/demo/ChengFenStore/data/user_repository.py new file mode 100644 index 0000000..acd9715 --- /dev/null +++ b/demo/ChengFenStore/data/user_repository.py @@ -0,0 +1,10 @@ +class UserRepository: + def __init__(self, db): + self.db = db + + def add_user(self, user): + self.db.session.add(user) + self.db.session.commit() + + def get_user_by_phone_number(self, phone_number): + return self.db.session.query(User).filter_by(phone_number=phone_number).first() diff --git a/demo/ChengFenStore/models/order.py b/demo/ChengFenStore/models/order.py new file mode 100644 index 0000000..1fbddc5 --- /dev/null +++ b/demo/ChengFenStore/models/order.py @@ -0,0 +1,8 @@ +class Order: + def __init__(self, order_id, user_id, product_details, delivery_method, order_status, order_status_history): + self.order_id = order_id + self.user_id = user_id + self.product_details = product_details + self.delivery_method = delivery_method + self.order_status = order_status + self.order_status_history = order_status_history diff --git a/demo/ChengFenStore/models/order_status.py b/demo/ChengFenStore/models/order_status.py new file mode 100644 index 0000000..e9ac14f --- /dev/null +++ b/demo/ChengFenStore/models/order_status.py @@ -0,0 +1,5 @@ +class OrderStatus: + def __init__(self, order_id, status, timestamp): + self.order_id = order_id + self.status = status + self.timestamp = timestamp diff --git a/demo/ChengFenStore/models/payment.py b/demo/ChengFenStore/models/payment.py new file mode 100644 index 0000000..1a98983 --- /dev/null +++ b/demo/ChengFenStore/models/payment.py @@ -0,0 +1,7 @@ +class Payment: + def __init__(self, payment_id, order_id, payment_method, payment_status, payment_status_history): + self.payment_id = payment_id + self.order_id = order_id + self.payment_method = payment_method + self.payment_status = payment_status + self.payment_status_history = payment_status_history diff --git a/demo/ChengFenStore/models/payment_status.py b/demo/ChengFenStore/models/payment_status.py new file mode 100644 index 0000000..c907dda --- /dev/null +++ b/demo/ChengFenStore/models/payment_status.py @@ -0,0 +1,5 @@ +class PaymentStatus: + def __init__(self, payment_id, status, timestamp): + self.payment_id = payment_id + self.status = status + self.timestamp = timestamp diff --git a/demo/ChengFenStore/models/user.py b/demo/ChengFenStore/models/user.py new file mode 100644 index 0000000..8863f0e --- /dev/null +++ b/demo/ChengFenStore/models/user.py @@ -0,0 +1,5 @@ +class User: + def __init__(self, phone_number, name, password): + self.phone_number = phone_number + self.name = name + self.password = password diff --git a/demo/ChengFenStore/models/user_login_request.py b/demo/ChengFenStore/models/user_login_request.py new file mode 100644 index 0000000..4fc2e1b --- /dev/null +++ b/demo/ChengFenStore/models/user_login_request.py @@ -0,0 +1,5 @@ +class UserLoginRequest: + def __init__(self, phone_number, password, verification_code): + self.phone_number = phone_number + self.password = password + self.verification_code = verification_code diff --git a/demo/ChengFenStore/models/user_login_response.py b/demo/ChengFenStore/models/user_login_response.py new file mode 100644 index 0000000..d02d93c --- /dev/null +++ b/demo/ChengFenStore/models/user_login_response.py @@ -0,0 +1,5 @@ +class UserLoginResponse: + def __init__(self, success, message, token): + self.success = success + self.message = message + self.token = token diff --git a/demo/ChengFenStore/models/user_profile.py b/demo/ChengFenStore/models/user_profile.py new file mode 100644 index 0000000..11f3d54 --- /dev/null +++ b/demo/ChengFenStore/models/user_profile.py @@ -0,0 +1,5 @@ +class UserProfile: + def __init__(self, phone_number, name, orders): + self.phone_number = phone_number + self.name = name + self.orders = orders diff --git a/demo/ChengFenStore/models/user_registration_request.py b/demo/ChengFenStore/models/user_registration_request.py new file mode 100644 index 0000000..77e273f --- /dev/null +++ b/demo/ChengFenStore/models/user_registration_request.py @@ -0,0 +1,6 @@ +class UserRegistrationRequest: + def __init__(self, phone_number, name, password, verification_code): + self.phone_number = phone_number + self.name = name + self.password = password + self.verification_code = verification_code diff --git a/demo/ChengFenStore/models/user_registration_response.py b/demo/ChengFenStore/models/user_registration_response.py new file mode 100644 index 0000000..0e1ccfa --- /dev/null +++ b/demo/ChengFenStore/models/user_registration_response.py @@ -0,0 +1,5 @@ +class UserRegistrationResponse: + def __init__(self, success, message, token): + self.success = success + self.message = message + self.token = token diff --git a/demo/ChengFenStore/services/order_service.py b/demo/ChengFenStore/services/order_service.py new file mode 100644 index 0000000..98829a4 --- /dev/null +++ b/demo/ChengFenStore/services/order_service.py @@ -0,0 +1,20 @@ +class OrderService: + def __init__(self, order_repository): + self.order_repository = order_repository + + def create_order(self, order): + self.order_repository.add_order(order) + return order + + def get_order_by_id(self, order_id): + return self.order_repository.get_order_by_id(order_id) + + def confirm_order(self, order_id): + order = self.order_repository.get_order_by_id(order_id) + if order: + order.order_status = "已支付" + self.order_repository.update_order(order) + return order + + def track_order(self, order_id): + return self.order_repository.get_order_by_id(order_id) diff --git a/demo/ChengFenStore/services/payment_service.py b/demo/ChengFenStore/services/payment_service.py new file mode 100644 index 0000000..8283d69 --- /dev/null +++ b/demo/ChengFenStore/services/payment_service.py @@ -0,0 +1,12 @@ +class PaymentService: + def __init__(self, payment_repository): + self.payment_repository = payment_repository + + def process_payment(self, payment): + # Implement payment processing logic here + payment.payment_status = "Processed" + self.payment_repository.add_payment(payment) + return True + + def get_payment_records(self): + return self.payment_repository.get_all_payments() diff --git a/demo/ChengFenStore/services/user_service.py b/demo/ChengFenStore/services/user_service.py new file mode 100644 index 0000000..51f1948 --- /dev/null +++ b/demo/ChengFenStore/services/user_service.py @@ -0,0 +1,65 @@ +class UserService: + def __init__(self, user_repository, configuration): + self.user_repository = user_repository + self.configuration = configuration + + def register(self, request): + existing_user = self.user_repository.get_user_by_phone_number(request.phone_number) + if existing_user: + return { + "success": False, + "message": "User already exists." + } + + user = { + "phone_number": request.phone_number, + "name": request.name, + "password": request.password + } + + self.user_repository.add_user(user) + + return { + "success": True, + "message": "User registered successfully." + } + + def login(self, request): + user = self.user_repository.get_user_by_phone_number(request.phone_number) + if not user or user["password"] != request.password: + return { + "success": False, + "message": "Invalid phone number or password." + } + + token = self.generate_jwt_token(user) + + return { + "success": True, + "message": "Login successful.", + "token": token + } + + def get_user_profile(self, user_id): + user = self.user_repository.get_user_by_id(user_id) + if not user: + return None + + return { + "phone_number": user["phone_number"], + "name": user["name"], + "orders": user["orders"] + } + + def generate_jwt_token(self, user): + import jwt + import datetime + + payload = { + "user_id": user["phone_number"], + "exp": datetime.datetime.utcnow() + datetime.timedelta(days=7) + } + key = self.configuration["Jwt"]["Key"] + token = jwt.encode(payload, key, algorithm="HS256") + + return token