mirror of
https://github.com/Paris-est-Ludique/intranet.git
synced 2025-09-11 13:56:29 +02:00
Fix tests & improve pre-register
This commit is contained in:
@@ -1,11 +1,17 @@
|
||||
import axios from "axios"
|
||||
import _ from "lodash"
|
||||
|
||||
import config from "../config"
|
||||
import { axiosConfig } from "./auth"
|
||||
|
||||
export type ElementWithId = unknown & { id: number }
|
||||
|
||||
export function get<Element>(elementName: string): (id: number) => Promise<{
|
||||
export type ElementTranslation = { [englishProp: string]: string }
|
||||
|
||||
export function get<Element>(
|
||||
elementName: string,
|
||||
translation: ElementTranslation
|
||||
): (id: number) => Promise<{
|
||||
data?: Element
|
||||
error?: Error
|
||||
}> {
|
||||
@@ -19,14 +25,24 @@ export function get<Element>(elementName: string): (id: number) => Promise<{
|
||||
...axiosConfig,
|
||||
params: { id },
|
||||
})
|
||||
return { data }
|
||||
if (!data) {
|
||||
return { data }
|
||||
}
|
||||
const englishData = _.mapValues(
|
||||
translation,
|
||||
(frenchProp: string) => data[frenchProp]
|
||||
) as Element
|
||||
return { data: englishData }
|
||||
} catch (error) {
|
||||
return { error: error as Error }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function listGet<Element>(elementName: string): () => Promise<{
|
||||
export function listGet<Element>(
|
||||
elementName: string,
|
||||
translation: ElementTranslation
|
||||
): () => Promise<{
|
||||
data?: Element[]
|
||||
error?: Error
|
||||
}> {
|
||||
@@ -37,7 +53,18 @@ export function listGet<Element>(elementName: string): () => Promise<{
|
||||
return async (): Promise<ElementListGetResponse> => {
|
||||
try {
|
||||
const { data } = await axios.get(`${config.API_URL}/${elementName}ListGet`, axiosConfig)
|
||||
return { data }
|
||||
if (!data) {
|
||||
return { data }
|
||||
}
|
||||
|
||||
const englishDataList = data.map(
|
||||
(frenchData: any) =>
|
||||
_.mapValues(
|
||||
translation,
|
||||
(frenchProp: string) => frenchData[frenchProp]
|
||||
) as Element
|
||||
)
|
||||
return { data: englishDataList }
|
||||
} catch (error) {
|
||||
return { error: error as Error }
|
||||
}
|
||||
@@ -46,7 +73,8 @@ export function listGet<Element>(elementName: string): () => Promise<{
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||
export function add<ElementNoId extends object, Element extends ElementNoId & ElementWithId>(
|
||||
elementName: string
|
||||
elementName: string,
|
||||
translation: ElementTranslation
|
||||
): (membreWithoutId: ElementNoId) => Promise<{
|
||||
data?: Element
|
||||
error?: Error
|
||||
@@ -57,19 +85,36 @@ export function add<ElementNoId extends object, Element extends ElementNoId & El
|
||||
}
|
||||
return async (membreWithoutId: ElementNoId): Promise<ElementGetResponse> => {
|
||||
try {
|
||||
const invertedTranslationWithoutId = _.invert(_.omit(translation, "id"))
|
||||
const frenchDataWithoutId = _.mapValues(
|
||||
invertedTranslationWithoutId,
|
||||
(englishProp: string, _frenchProp: string) => (membreWithoutId as any)[englishProp]
|
||||
)
|
||||
|
||||
const { data } = await axios.post(
|
||||
`${config.API_URL}/${elementName}Add`,
|
||||
membreWithoutId,
|
||||
frenchDataWithoutId,
|
||||
axiosConfig
|
||||
)
|
||||
return { data }
|
||||
if (!data) {
|
||||
return { data }
|
||||
}
|
||||
|
||||
const englishData = _.mapValues(
|
||||
translation,
|
||||
(frenchProp: string) => data[frenchProp]
|
||||
) as Element
|
||||
return { data: englishData }
|
||||
} catch (error) {
|
||||
return { error: error as Error }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function set<Element>(elementName: string): (membre: Element) => Promise<{
|
||||
export function set<Element>(
|
||||
elementName: string,
|
||||
translation: ElementTranslation
|
||||
): (membre: Element) => Promise<{
|
||||
data?: Element
|
||||
error?: Error
|
||||
}> {
|
||||
@@ -79,12 +124,26 @@ export function set<Element>(elementName: string): (membre: Element) => Promise<
|
||||
}
|
||||
return async (membre: Element): Promise<ElementGetResponse> => {
|
||||
try {
|
||||
const invertedTranslation = _.invert(translation)
|
||||
const frenchData = _.mapValues(
|
||||
invertedTranslation,
|
||||
(englishProp: string) => (membre as any)[englishProp]
|
||||
)
|
||||
|
||||
const { data } = await axios.post(
|
||||
`${config.API_URL}/${elementName}Set`,
|
||||
membre,
|
||||
frenchData,
|
||||
axiosConfig
|
||||
)
|
||||
return { data }
|
||||
if (!data) {
|
||||
return { data }
|
||||
}
|
||||
|
||||
const englishData = _.mapValues(
|
||||
translation,
|
||||
(frenchProp: string) => data[frenchProp]
|
||||
) as Element
|
||||
return { data: englishData }
|
||||
} catch (error) {
|
||||
return { error: error as Error }
|
||||
}
|
||||
|
@@ -3,23 +3,34 @@ import { get, listGet, add, set } from "./accessors"
|
||||
export class Envie {
|
||||
id = 0
|
||||
|
||||
domaine = ""
|
||||
domain = ""
|
||||
|
||||
envies = ""
|
||||
wish = ""
|
||||
|
||||
precisions = ""
|
||||
details = ""
|
||||
|
||||
equipes: string[] = []
|
||||
teams: string[] = []
|
||||
|
||||
dateAjout = ""
|
||||
addedDate = ""
|
||||
}
|
||||
|
||||
export const translationEnvie: { [k in keyof Envie]: string } = {
|
||||
id: "id",
|
||||
domain: "domaine",
|
||||
wish: "envies",
|
||||
details: "precisions",
|
||||
teams: "equipes",
|
||||
addedDate: "dateAjout",
|
||||
}
|
||||
|
||||
const elementName = "Envie"
|
||||
|
||||
export type EnvieWithoutId = Omit<Envie, "id">
|
||||
|
||||
export const envieGet = get<Envie>("Envie")
|
||||
export const envieGet = get<Envie>(elementName, translationEnvie)
|
||||
|
||||
export const envieListGet = listGet<Envie>("Envie")
|
||||
export const envieListGet = listGet<Envie>(elementName, translationEnvie)
|
||||
|
||||
export const envieAdd = add<EnvieWithoutId, Envie>("Envie")
|
||||
export const envieAdd = add<EnvieWithoutId, Envie>(elementName, translationEnvie)
|
||||
|
||||
export const envieSet = set<Envie>("Envie")
|
||||
export const envieSet = set<Envie>(elementName, translationEnvie)
|
||||
|
@@ -3,17 +3,17 @@ import { get, listGet, add, set } from "./accessors"
|
||||
export class JeuJav {
|
||||
id = 0
|
||||
|
||||
titre = ""
|
||||
title = ""
|
||||
|
||||
auteur = ""
|
||||
author = ""
|
||||
|
||||
editeur = ""
|
||||
editor = ""
|
||||
|
||||
minJoueurs = 0
|
||||
playersMin = 0
|
||||
|
||||
maxJoueurs = 0
|
||||
playersMax = 0
|
||||
|
||||
duree = 0
|
||||
duration = 0
|
||||
|
||||
type: "Ambiance" | "Famille" | "Expert" | "" = ""
|
||||
|
||||
@@ -21,23 +21,43 @@ export class JeuJav {
|
||||
|
||||
bggId = 0
|
||||
|
||||
exemplaires = 1
|
||||
copies = 1
|
||||
|
||||
dispoPret = 0
|
||||
lendAvailability = 0
|
||||
|
||||
nonRangee = 0
|
||||
notStored = 0
|
||||
|
||||
ean = ""
|
||||
|
||||
bggPhoto = ""
|
||||
}
|
||||
|
||||
export const translationJeuJav: { [k in keyof JeuJav]: string } = {
|
||||
id: "id",
|
||||
title: "titre",
|
||||
author: "auteur",
|
||||
editor: "editeur",
|
||||
playersMin: "minJoueurs",
|
||||
playersMax: "maxJoueurs",
|
||||
duration: "duree",
|
||||
type: "type",
|
||||
poufpaf: "poufpaf",
|
||||
bggId: "bggId",
|
||||
copies: "exemplaires",
|
||||
lendAvailability: "dispoPret",
|
||||
notStored: "nonRangee",
|
||||
ean: "ean",
|
||||
bggPhoto: "bggPhoto",
|
||||
}
|
||||
|
||||
const elementName = "JeuJav"
|
||||
|
||||
export type JeuJavWithoutId = Omit<JeuJav, "id">
|
||||
|
||||
export const jeuJavGet = get<JeuJav>("JeuJav")
|
||||
export const jeuJavGet = get<JeuJav>(elementName, translationJeuJav)
|
||||
|
||||
export const jeuJavListGet = listGet<JeuJav>("JeuJav")
|
||||
export const jeuJavListGet = listGet<JeuJav>(elementName, translationJeuJav)
|
||||
|
||||
export const jeuJavAdd = add<JeuJavWithoutId, JeuJav>("JeuJav")
|
||||
export const jeuJavAdd = add<JeuJavWithoutId, JeuJav>(elementName, translationJeuJav)
|
||||
|
||||
export const jeuJavSet = set<JeuJav>("JeuJav")
|
||||
export const jeuJavSet = set<JeuJav>(elementName, translationJeuJav)
|
||||
|
@@ -3,38 +3,56 @@ import { get, listGet, add, set } from "./accessors"
|
||||
export class Membre {
|
||||
id = 0
|
||||
|
||||
nom = ""
|
||||
lastname = ""
|
||||
|
||||
prenom = ""
|
||||
firstname = ""
|
||||
|
||||
mail = ""
|
||||
email = ""
|
||||
|
||||
telephone = ""
|
||||
mobile = ""
|
||||
|
||||
photo = ""
|
||||
|
||||
alimentation = ""
|
||||
food = ""
|
||||
|
||||
majeur = 1
|
||||
adult = 1
|
||||
|
||||
privilege = 0
|
||||
privileges = 0
|
||||
|
||||
actif = 0
|
||||
active = 0
|
||||
|
||||
commentaire = ""
|
||||
comment = ""
|
||||
|
||||
horodatage = ""
|
||||
timestamp = ""
|
||||
|
||||
passe = ""
|
||||
password = ""
|
||||
}
|
||||
|
||||
export const translationMember: { [k in keyof Membre]: string } = {
|
||||
id: "id",
|
||||
lastname: "nom",
|
||||
firstname: "prenom",
|
||||
email: "mail",
|
||||
mobile: "telephone",
|
||||
photo: "photo",
|
||||
food: "alimentation",
|
||||
adult: "majeur",
|
||||
privileges: "privilege",
|
||||
active: "actif",
|
||||
comment: "commentaire",
|
||||
timestamp: "horodatage",
|
||||
password: "passe",
|
||||
}
|
||||
|
||||
const elementName = "Membre"
|
||||
|
||||
export const emailRegexp =
|
||||
/^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/i
|
||||
export const passwordMinLength = 4
|
||||
|
||||
export interface MemberLogin {
|
||||
membre?: {
|
||||
prenom: string
|
||||
firstname: string
|
||||
}
|
||||
jwt?: string
|
||||
error?: string
|
||||
@@ -42,10 +60,10 @@ export interface MemberLogin {
|
||||
|
||||
export type MembreWithoutId = Omit<Membre, "id">
|
||||
|
||||
export const membreGet = get<Membre>("Membre")
|
||||
export const membreGet = get<Membre>(elementName, translationMember)
|
||||
|
||||
export const membreListGet = listGet<Membre>("Membre")
|
||||
export const membreListGet = listGet<Membre>(elementName, translationMember)
|
||||
|
||||
export const membreAdd = add<MembreWithoutId, Membre>("Membre")
|
||||
export const membreAdd = add<MembreWithoutId, Membre>(elementName, translationMember)
|
||||
|
||||
export const membreSet = set<Membre>("Membre")
|
||||
export const membreSet = set<Membre>(elementName, translationMember)
|
||||
|
39
src/services/preMembers.ts
Normal file
39
src/services/preMembers.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import { get, listGet, add, set } from "./accessors"
|
||||
|
||||
export class PreMember {
|
||||
id = 0
|
||||
|
||||
firstname = ""
|
||||
|
||||
lastname = ""
|
||||
|
||||
email = ""
|
||||
|
||||
mobile = ""
|
||||
|
||||
alreadyVolunteer = false
|
||||
|
||||
comment = ""
|
||||
}
|
||||
|
||||
export const translationPreMember: { [k in keyof PreMember]: string } = {
|
||||
id: "id",
|
||||
firstname: "prenom",
|
||||
lastname: "nom",
|
||||
email: "email",
|
||||
mobile: "telephone",
|
||||
alreadyVolunteer: "dejaBenevole",
|
||||
comment: "commentaire",
|
||||
}
|
||||
|
||||
const elementName = "PreMember"
|
||||
|
||||
export type PreMemberWithoutId = Omit<PreMember, "id">
|
||||
|
||||
export const preMemberGet = get<PreMember>(elementName, translationPreMember)
|
||||
|
||||
export const preMemberListGet = listGet<PreMember>(elementName, translationPreMember)
|
||||
|
||||
export const preMemberAdd = add<PreMemberWithoutId, PreMember>(elementName, translationPreMember)
|
||||
|
||||
export const preMemberSet = set<PreMember>(elementName, translationPreMember)
|
Reference in New Issue
Block a user