feat: implement customer profile management and business application features

- Added customer profile controller with endpoints for retrieving, updating, and deactivating user profiles.
- Introduced address model and routes for managing user addresses.
- Created business application model and service for handling business applications, including approval and rejection processes.
- Developed business contact and credit account models to support business customer functionalities.
- Implemented settlement term model for managing payment terms.
- Added email templates for business application notifications (approved, rejected, received, and status changes).
- Enhanced validation schemas for customer and business inputs to ensure data integrity.
- Created unit tests for business application service and validation schemas to ensure functionality and correctness.
- Added migration scripts to set up new database tables and columns for customer and business features.
This commit is contained in:
Sathira Sri Sathara
2026-09-03 14:58:26 +05:30
parent b6b345f245
commit fd4e324571
36 changed files with 406 additions and 6 deletions
+2
View File
@@ -0,0 +1,2 @@
const r=require("express").Router(); const c=require("../controllers/address.controller"); const {authenticate}=require("../middleware/auth.middleware"); const validate=require("../middleware/validate.middleware"); const s=require("../validation/customer.schemas");
r.use(authenticate); r.get("/",c.list);r.post("/",validate(s.addressCreate),c.create);r.get("/:id",c.get);r.patch("/:id",validate(s.addressUpdate),c.update);r.delete("/:id",c.remove);module.exports=r;
+1
View File
@@ -0,0 +1 @@
const r=require("express").Router();const c=require("../controllers/business.controller");const {authenticate}=require("../middleware/auth.middleware");const {checkPermission}=require("../middleware/permission.middleware");const validate=require("../middleware/validate.middleware");const s=require("../validation/business.schemas");r.use(authenticate);r.get("/applications",checkPermission("business.applications.read",{custom:true}),c.adminListApplications);r.get("/applications/:id",checkPermission("business.applications.read",{custom:true}),c.adminGetApplication);r.post("/applications/:id/approve",checkPermission("business.applications.review",{custom:true}),c.approve);r.post("/applications/:id/reject",checkPermission("business.applications.review",{custom:true}),validate(s.reject),c.reject);r.get("/accounts",checkPermission("business.accounts.read",{custom:true}),c.adminListBusinesses);r.patch("/accounts/:id/status",checkPermission("business.accounts.update",{custom:true}),validate(s.status),c.setStatus);r.patch("/accounts/:id/credit",checkPermission("business.credit.manage",{custom:true}),validate(s.credit),c.setCredit);r.patch("/accounts/:id/settlement-term",checkPermission("business.settlement.manage",{custom:true}),validate(s.settlement),c.setSettlement);module.exports=r;
+1
View File
@@ -0,0 +1 @@
const r=require("express").Router();const c=require("../controllers/business.controller");const {authenticate}=require("../middleware/auth.middleware");const validate=require("../middleware/validate.middleware");const s=require("../validation/business.schemas");const customerSchemas=require("../validation/customer.schemas");r.use(authenticate);r.post("/applications",validate(s.application),c.apply);r.get("/applications/me",c.myApplications);r.get("/applications/:id",c.getApplication);r.get("/me",c.getMe);r.patch("/me",validate(s.businessUpdate),c.updateMe);r.post("/me/contacts",validate(s.contact),c.addContact);r.post("/me/addresses",validate(customerSchemas.addressCreate),c.addAddress);module.exports=r;
+6
View File
@@ -23,6 +23,9 @@ const notificationRoutes = require("./notification.routes");
const adminAuthRoutes = require("./adminAuth.routes");
const riderAuthRoutes = require("./riderAuth.routes");
const adminUserRoutes = require("./adminUser.routes");
const addressRoutes = require("./address.routes");
const businessRoutes = require("./business.routes");
const adminBusinessRoutes = require("./adminBusiness.routes");
const router = express.Router();
@@ -38,5 +41,8 @@ router.use("/permissions", permissionRoutes);
router.use("/admin/auth", adminAuthRoutes);
router.use("/rider/auth", riderAuthRoutes);
router.use("/admin/users", adminUserRoutes);
router.use("/addresses", addressRoutes);
router.use("/business", businessRoutes);
router.use("/admin/business", adminBusinessRoutes);
module.exports = router;
+5
View File
@@ -24,6 +24,11 @@ const { sensitiveLimiter } = require("../middleware/rateLimit.middleware");
const validate = require("../middleware/validate.middleware");
const schemas = require("../validation/auth.schemas");
const { requireOwnership } = require("../middleware/permission.middleware");
const customerProfile = require("../controllers/customerProfile.controller");
const customerSchemas = require("../validation/customer.schemas");
router.get("/me", authenticate, customerProfile.getMe);
router.patch("/me", authenticate, validate(customerSchemas.profileUpdate), customerProfile.updateMe);
router.post("/req-reset-password", sensitiveLimiter, validate(schemas.forgot), authController.forgotPassword);
+4
View File
@@ -18,9 +18,13 @@ const {
const { authorizedAccountType, checkPermission } = require("../middleware/permission.middleware");
const PERMISSIONS = require("../constants/permissions");
const customerProfile = require("../controllers/customerProfile.controller");
const validate = require("../middleware/validate.middleware");
const customerSchemas = require("../validation/customer.schemas");
router.get("/me", authenticate, userController.getCurrentUser);
router.patch("/me", authenticate, userController.updateCurrentUser);
router.post("/me/deactivate", authenticate, validate(customerSchemas.deactivate), customerProfile.deactivate);
router.post(