mr-sazzad / Api-Getway

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

university-management-api-gateway-starter

💡 You Have To Add Validation On Main Service Not Into Getway Service If You Set Validation Into Getway It's Does Not Work Properly

  🧠🧠🧠 আমাদের যদি সকল সার্ভিসের end points  গুলো এক না হয়,
  এবং আমদের কয়েকটি service  ডাটা পাঠাবার প্রয়োজন হয়
 তাহলে যে সার্ভিসে ডাটা প্রয়োজন হবে সেই সার্ভিসে আমরা একটা main file বানাবো
 এবং আমরা main service থেকে যে নামে Publish করেছি,
 সেই নামে  প্রয়োজনিয় অন্য file   subscribe করে থাকবো এবং ডাটা Get করবো

// Publish
  if (result) {
    await RedisClient.publish(
      EVENT_ACADEMIC_SEMESTER_CREATED,
      JSON.stringify(result)
    );
  }

//Subscribe
const initAcademicSemesterEvents = () => {
  RedisClient.subscribe(EVENT_ACADEMIC_SEMESTER_CREATED, async (e: string) => {
    const data: IAcademicSemesterCreatedEvent = JSON.parse(e);

    await AcademicSemesterService.createSemesterFromEvent(data);
    //console.log(data);
  });
/* 🦀 AGENDA 🦀*/

1. httpService
2. getSingleData
3. updateSingleData
4. zod-enumType
// 🧠 this is the httpService file

import axios, { AxiosInstance } from "axios";
import config from "../config";

const HttpService = (baseUrl: string): AxiosInstance => {
  const instance = axios.create({
    baseURL: baseUrl,
    timeout: 10000,
    headers: {
      "Content-Type": "application/json"
    }
  });

  instance.interceptors.request.use(
    (config) => {
      return config;
    },
    (error) => {
      return Promise.reject(error);
    }
  );

  instance.interceptors.response.use(
    (response) => {
      return response.data;
    },
    (error) => {
      return Promise.reject(error);
    }
  );

  return instance;
};

const AuthService = HttpService(config.authServiceUrl);

const CoreService = HttpService(config.coreServiceUrl);

export { AuthService, CoreService, HttpService };

Get Single Data From Database

// 🧠 get single Academic Semester from postgreSql database

const getSingleFromDatabase = async (req: Request): Promise<IGenericResponse> => {
  const id = req.params.id;
  const response: IGenericResponse = await CoreService.get(`/academic-semesters/${id}`, {
    params: req.query,
    headers: {
      Authorization: req.headers.authorization
    }
  });
  return response;
};

Update Single Data Into Database

// 🧠 Updata Single Academic Semester Into Database Code

const updateSingleIntoDatabase = async (req: Request): Promise<IGenericResponse> => {
  const id = req.params.id;
  const response: IGenericResponse = await CoreService.patch(  //💡spacify the method 
    `/academic-semesters/${id}`, 
    req.body,  //💡data uou want to update 
    {
      headers: {
        Authorization: req.headers.authorization
      }
    }
  );
  return response;
};
// 🧠 zod validation Enum type

    title: z.enum([...academicSemesterTitles] as [string, ...string[]], {
      required_error: "Title is required"
    })

About


Languages

Language:TypeScript 100.0%