import { new_client } from '../db/db_client'; import { Member, User } from '../types/member'; import { Either, eitherLeft, eitherRight } from '../utils/utils'; type DBMembre = { id_membre: number; nom_membre: string; mdp_membre: string; }; function db2member(data: DBMembre) { const member: Member = { id_member: data.id_membre, name: data.nom_membre, password: data.mdp_membre, }; return member; } const getMember = async (idOrName: number | string): Promise> => { const client = new_client(); await client.connect(); let res; if (typeof idOrName !== 'number') { res = await client.query("SELECT * FROM membres WHERE nom_membre=$1;", [`${idOrName}`]); } else { res = await client.query("SELECT * FROM membres WHERE id_membre=$1;", [idOrName]); } if (res.rows.length === 0) { await client.end(); return eitherRight("Does not exist."); } const member = db2member(res.rows[0]); await client.end(); return eitherLeft(member); } const getAllMembers = async () => { const client = new_client(); await client.connect(); const res = await client.query("SELECT * FROM membres"); await client.end(); return res.rows.map(db2member); } const createMember = async (name: string, passwd: string): Promise> => { const gettingMember = await getMember(name); if (!gettingMember.hasRight) { return eitherRight("Already in database."); } const client = new_client(); await client.connect(); const res = await client.query("INSERT INTO membres (nom_membre, mdp_membre) VALUES ($1, $2) RETURNING *;", [`${name}`, `${passwd}`]); if (res.rows.length === 0) { await client.end(); return eitherRight("Something went wrong"); } const member: Member = { id_member: res.rows[0].id_membre, name: res.rows[0].nom_membre, password: res.rows[0].mdp_membre }; await client.end(); return eitherLeft(member); } const getDefaultUser = (): User => ({ id_member: -1, name: "unknown" }); const getDefaultMember = (): Member => ({ id_member: -1, name: "unknown", password: "none" }); function userAdapter(member: Member): User { return { id_member: member.id_member, name: member.name }; } const memberService = { getMember, createMember, getDefaultUser, getDefaultMember, userAdapter, getAllMembers, }; export default memberService;