Factors redux tools to access the DB

This commit is contained in:
forceoranj
2021-11-16 03:02:03 +01:00
parent b76fbc78ff
commit bf62510d0a
24 changed files with 506 additions and 462 deletions

85
src/services/accessors.ts Normal file
View File

@@ -0,0 +1,85 @@
import axios from "axios"
import config from "../config"
export type ElementWithId = unknown & { id: number }
export function get<Element>(elementName: string): (id: number) => Promise<{
data?: Element
error?: Error
}> {
interface ElementGetResponse {
data?: Element
error?: Error
}
return async (id: number): Promise<ElementGetResponse> => {
try {
const { data } = await axios.get(`${config.API_URL}/${elementName}Get`, {
params: { id },
})
return { data }
} catch (error) {
return { error: error as Error }
}
}
}
export function listGet<Element>(elementName: string): () => Promise<{
data?: Element[]
error?: Error
}> {
interface ElementListGetResponse {
data?: Element[]
error?: Error
}
return async (): Promise<ElementListGetResponse> => {
try {
const { data } = await axios.get(`${config.API_URL}/${elementName}ListGet`)
return { data }
} catch (error) {
return { error: error as Error }
}
}
}
// eslint-disable-next-line @typescript-eslint/ban-types
export function add<ElementNoId extends object, Element extends ElementNoId & ElementWithId>(
elementName: string
): (membreWithoutId: ElementNoId) => Promise<{
data?: Element
error?: Error
}> {
interface ElementGetResponse {
data?: Element
error?: Error
}
return async (membreWithoutId: ElementNoId): Promise<ElementGetResponse> => {
try {
const { data } = await axios.post(
`${config.API_URL}/${elementName}Add`,
membreWithoutId
)
return { data }
} catch (error) {
return { error: error as Error }
}
}
}
export function set<Element>(elementName: string): (membre: Element) => Promise<{
data?: Element
error?: Error
}> {
interface ElementGetResponse {
data?: Element
error?: Error
}
return async (membre: Element): Promise<ElementGetResponse> => {
try {
const { data } = await axios.post(`${config.API_URL}/${elementName}Set`, membre)
return { data }
} catch (error) {
return { error: error as Error }
}
}
}

View File

@@ -1,6 +1,4 @@
import axios from "axios"
import config from "../config"
import { get, listGet, add, set } from "./accessors"
export class Envie {
id = 0
@@ -15,30 +13,13 @@ export class Envie {
dateAjout = ""
}
export type EnvieWithoutId = Omit<Envie, "id">
export interface EnvieListGetResponse {
data?: Envie[]
error?: Error
}
export const envieListGet = async (): Promise<EnvieListGetResponse> => {
try {
const { data } = await axios.get(`${config.API_URL}/EnvieListGet`)
return { data }
} catch (error) {
return { error: error as Error }
}
}
export const envieGet = get<Envie>("Envie")
export interface EnvieAddResponse {
data?: Envie
error?: Error
}
export const envieAdd = async (envieWithoutId: EnvieWithoutId): Promise<EnvieAddResponse> => {
try {
const { data } = await axios.post(`${config.API_URL}/EnvieAdd`, envieWithoutId)
return { data }
} catch (error) {
return { error: error as Error }
}
}
export const envieListGet = listGet<Envie>("Envie")
export const envieAdd = add<EnvieWithoutId, Envie>("Envie")
export const envieSet = set<Envie>("Envie")

View File

@@ -1,61 +0,0 @@
import axios from "axios"
import config from "../config"
export class JeuJav {
id = 0
titre = ""
auteur = ""
editeur = ""
minJoueurs = 0
maxJoueurs = 0
duree = 0
type: "Ambiance" | "Famille" | "Expert" | "" = ""
poufpaf = ""
bggId = 0
exemplaires = 1
dispoPret = 0
nonRangee = 0
ean = ""
bggPhoto = ""
}
export interface JeuJavListResponse {
data?: JeuJav[]
error?: Error
}
export const getJeuJavList = async (): Promise<JeuJavListResponse> => {
try {
const { data } = await axios.get(`${config.API_URL}/JeuJavListGet`)
return { data }
} catch (error) {
return { error: error as Error }
}
}
export interface JeuJavResponse {
data?: JeuJav
error?: Error
}
export const getJeuJavData = async (id: string): Promise<JeuJavResponse> => {
try {
const { data } = await axios.get(`${config.API_URL}/JeuJavGet`, { params: { id } })
return { data }
} catch (error) {
return { error: error as Error }
}
}

43
src/services/jeuxJav.ts Normal file
View File

@@ -0,0 +1,43 @@
import { get, listGet, add, set } from "./accessors"
export class JeuJav {
id = 0
titre = ""
auteur = ""
editeur = ""
minJoueurs = 0
maxJoueurs = 0
duree = 0
type: "Ambiance" | "Famille" | "Expert" | "" = ""
poufpaf = ""
bggId = 0
exemplaires = 1
dispoPret = 0
nonRangee = 0
ean = ""
bggPhoto = ""
}
export type JeuJavWithoutId = Omit<JeuJav, "id">
export const jeuJavGet = get<JeuJav>("JeuJav")
export const jeuJavListGet = listGet<JeuJav>("JeuJav")
export const jeuJavAdd = add<JeuJavWithoutId, JeuJav>("JeuJav")
export const jeuJavSet = set<JeuJav>("JeuJav")

View File

@@ -1,6 +1,4 @@
import axios from "axios"
import config from "../config"
import { get, listGet, add, set } from "./accessors"
export class Membre {
id = 0
@@ -29,56 +27,13 @@ export class Membre {
passe = ""
}
export type MembreWithoutId = Omit<Membre, "id">
export interface MembreListGetResponse {
data?: Membre[]
error?: Error
}
export const membreListGet = async (): Promise<MembreListGetResponse> => {
try {
const { data } = await axios.get(`${config.API_URL}/MembreListGet`)
return { data }
} catch (error) {
return { error: error as Error }
}
}
export const membreGet = get<Membre>("Membre")
export interface MembreGetResponse {
data?: Membre
error?: Error
}
export const membreGet = async (id: number): Promise<MembreGetResponse> => {
try {
const { data } = await axios.get(`${config.API_URL}/MembreGet`, { params: { id } })
return { data }
} catch (error) {
return { error: error as Error }
}
}
export const membreListGet = listGet<Membre>("Membre")
export interface MembreSetResponse {
data?: Membre
error?: Error
}
export const membreSet = async (membre: Membre): Promise<MembreSetResponse> => {
try {
const { data } = await axios.post(`${config.API_URL}/MembreSet`, membre)
return { data }
} catch (error) {
return { error: error as Error }
}
}
export const membreAdd = add<MembreWithoutId, Membre>("Membre")
export interface MembreAddResponse {
data?: Membre
error?: Error
}
export const membreAdd = async (membreWithoutId: MembreWithoutId): Promise<MembreAddResponse> => {
try {
const { data } = await axios.post(`${config.API_URL}/MembreAdd`, membreWithoutId)
return { data }
} catch (error) {
return { error: error as Error }
}
}
export const membreSet = set<Membre>("Membre")