Fix tests & improve pre-register

This commit is contained in:
pikiou
2021-12-03 10:39:37 +01:00
parent fde48e6cbb
commit d63f906206
44 changed files with 739 additions and 899 deletions

View File

@@ -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 }
}

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View 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)