55 lines
2.6 KiB
TypeScript
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 };
|