Files
shop-api/src/modules/address/address.controller.ts
T
mahyargdz be82059172 first
2025-09-14 15:15:03 +03:30

55 lines
2.6 KiB
TypeScript

import { Request } from "express";
import { inject } from "inversify";
import { controller, httpGet, httpPost, queryParam, request, requestBody } from "inversify-express-utils";
import { AddressService } from "./address.service";
import { HttpStatus } from "../../common";
import { SaveSellerAddressDTO, SaveUserAddressDTO } from "./DTO/userAddress.dto";
import { BaseController } from "../../common/base/controller";
import { ApiAuth, ApiModel, ApiOperation, ApiQuery, ApiResponse, ApiTags } from "../../common/decorator/swggerDocs";
import { Guard } from "../../core/middlewares/guard.middleware";
import { ValidationMiddleware } from "../../core/middlewares/validator.middleware";
import { IOCTYPES } from "../../IOC/ioc.types";
import { ISeller } from "../seller/models/Abstraction/ISeller";
import { IUser } from "../user/models/Abstraction/IUser";
@controller("/address")
@ApiTags("Address")
class AddressController extends BaseController {
@inject(IOCTYPES.AddressService) addressService: AddressService;
@ApiOperation("get user location with geo coordinate")
@ApiResponse("successful", HttpStatus.Ok)
@ApiQuery("lat", "latitude", true)
@ApiQuery("lon", "longitude", true)
@httpGet("/location/reverse")
public async getLocationWithGeo(@queryParam("lat") lat: string, @queryParam("lon") lon: string) {
const data = await this.addressService.getLocationWithGeo({ lat, lon });
return this.response(data);
}
@ApiOperation("set user address of current session user ==> login as user")
@ApiResponse("successful", HttpStatus.Created)
@ApiModel(SaveUserAddressDTO)
@ApiAuth()
@httpPost("/user/save", Guard.authUser(), ValidationMiddleware.validateInput(SaveUserAddressDTO))
public async saveUserAddress(@requestBody() addressDto: SaveUserAddressDTO, @request() req: Request) {
const user = req.user as IUser;
const data = await this.addressService.setUserAddress(user._id.toString(), addressDto);
return this.response(data, HttpStatus.Created);
}
@ApiOperation("set shop address of current session seller ==> login as seller")
@ApiResponse("successful", HttpStatus.Created)
@ApiModel(SaveSellerAddressDTO)
@ApiAuth()
@httpPost("/seller/save", Guard.authSeller(), ValidationMiddleware.validateInput(SaveSellerAddressDTO))
public async saveSellerShopAddress(@requestBody() addressDto: SaveSellerAddressDTO, @request() req: Request) {
const seller = req.user as ISeller;
const data = await this.addressService.setSellerShopAddress(seller._id.toString(), addressDto);
return this.response(data, HttpStatus.Created);
}
}
export { AddressController };