coba.ts

 avatar
unknown
typescript
2 years ago
2.2 kB
3
Indexable
import { ClientBase } from 'pg';
import { Request, Response } from 'lambda-api';
import { getAuth } from '../../../shared/libs/auth';
import { failure, success } from '../../../shared/libs/response';
import code from '../../../shared/libs/code';
import { validateParameterNumber, validateParameterString } from '../../../shared/libs/validation';

async function getStudent(
  db: ClientBase,
  tenantUuid: string,
  studentId: number
): Promise<any> {
  try {

    const queryResult = await db.query(`
      select student.student_id,
             student.student_name,
             student.religion_id
      from student
      where deleted_at is null
        and tenant_uuid = $1
        and student_id = $2
    `, [
      tenantUuid,
      studentId,
    ]);

    if (queryResult.rowCount === 0) {
      return null;
    }

    return queryResult.rows[0];

  } catch (e) {
    console.error('[ERROR-QUERY] - func: getStudent', e);
    throw Error(code.database_error);
  }
}

function validateParameters(req: Request) {
  const studentId = validateParameterNumber(req.params.student_id);
  const studentName = validateParameterString(req.query.student_name, false);
  const religionId = validateParameterNumber(req.query.religion_id, false);

  console.log(req.query, req.params, req.body);

  if (
    !studentId
    || studentName === false
    || religionId === false
  ) {
    throw Error(code.input_invalid);
  }

  return {
    student_id: studentId,
    student_name: studentName,
    religion_id: religionId,
  };
}

export default async function coba(req: Request, res: Response): Promise<any> {
  try {
    const auth = getAuth(req);
    const param = validateParameters(req);

    const student = await getStudent(req.namespace.db, auth.tenant_uuid, param.student_id);


    success(res, {
      status: true,
      version: req.version,
      message: 'success',
      data: {
        ...student,
        test_student_name: param.student_name,
        test_religion_id: param.religion_id,
      },
      meta: null,
    });
  } catch (e) {
    failure(res, e);
  }
}