.ts
TypeScript
(application/typescript)
// 3rd-party
import type { ReqHandler } from "@ethicdevs/react-monolith";
import { User } from "@prisma/client";
// app
import { AppRoute, AppRoutesParams } from "../../routes.defs";
import { makeUsersService } from "../../services/user";
// app views
import UserDetailsView, {
  UserDetailsViewProps,
} from "../../views/user/UserDetailsView";

const getUserDetailsView: ReqHandler = async (request, reply) => {
  const { username } =
    request.params as AppRoutesParams[AppRoute.USER_DETAILS]["params"];

  const { curr_user_uid } = request.session.data;

  const usersService = makeUsersService({ request });
  const user = await usersService.getUserByUsername(username);

  if (user == null) {
    return reply.status(404).callNotFound();
  }

  let currentUser: User | null = null;

  if (curr_user_uid != null && user.id === curr_user_uid) {
    currentUser = await usersService.getUserById(curr_user_uid);
  }

  const reqHandler = reply.makeRequestHandler(request, reply);
  return reqHandler<UserDetailsViewProps>(UserDetailsView.name, {
    currentUser,
    repositories: await usersService.getUserRepositories(user),
    user,
  });
};

export default getUserDetailsView;