diff --git a/src/api/endpoints/authFactor.ts b/src/api/endpoints/authFactor.ts index 4712baa..34d63e4 100644 --- a/src/api/endpoints/authFactor.ts +++ b/src/api/endpoints/authFactor.ts @@ -3,8 +3,8 @@ import { type EndpointBuilder } from "@reduxjs/toolkit/query/react" import { buildUrl, tagData, - type ListArg, - type ListResult, + type ListArg as _ListArg, + type ListResult as _ListResult, } from "../../utils/api" import type { AuthFactor } from "../models" import { type TagTypes } from "../tagTypes" @@ -12,14 +12,15 @@ import urls from "../urls" export const AUTH_FACTOR_TAG: TagTypes = "AuthFactor" -export type ListAuthFactorsResult = ListResult -export type ListAuthFactorsArg = ListArg +export type ListAuthFactorsResult = _ListResult +export type ListAuthFactorsArg = _ListArg -export default function getReadAuthFactorEndpoints( - build: EndpointBuilder, -) { +export default function getReadAuthFactorEndpoints< + ListResult extends _ListResult = ListAuthFactorsResult, + ListArg extends _ListArg = ListAuthFactorsArg, +>(build: EndpointBuilder) { return { - listAuthFactors: build.query({ + listAuthFactors: build.query({ query: search => ({ url: buildUrl(urls.authFactor.list, { search }), method: "GET", diff --git a/src/api/endpoints/klass.ts b/src/api/endpoints/klass.ts index 4722d01..bbe7271 100644 --- a/src/api/endpoints/klass.ts +++ b/src/api/endpoints/klass.ts @@ -3,10 +3,10 @@ import { type EndpointBuilder } from "@reduxjs/toolkit/query/react" import { buildUrl, tagData, - type ListArg, - type ListResult, - type RetrieveArg, - type RetrieveResult, + type ListArg as _ListArg, + type ListResult as _ListResult, + type RetrieveArg as _RetrieveArg, + type RetrieveResult as _RetrieveResult, } from "../../utils/api" import type { Class, @@ -19,7 +19,7 @@ import urls from "../urls" export const CLASS_TAG: TagTypes = "Class" -export type RetrieveClassResult = RetrieveResult< +export type RetrieveClassResult = _RetrieveResult< Class, "name" | "read_classmates_data" | "receive_requests_until" | "school" > & { @@ -36,9 +36,9 @@ export type RetrieveClassResult = RetrieveResult< > } } -export type RetrieveClassArg = RetrieveArg +export type RetrieveClassArg = _RetrieveArg -export type ListClassesResult = ListResult< +export type ListClassesResult = _ListResult< Class, "name" | "read_classmates_data" | "receive_requests_until" | "school", { @@ -56,20 +56,23 @@ export type ListClassesResult = ListResult< } } > -export type ListClassesArg = ListArg<{ teacher: Teacher["id"] }> +export type ListClassesArg = _ListArg<{ teacher: Teacher["id"] }> -export default function getReadClassEndpoints( - build: EndpointBuilder, -) { +export default function getReadClassEndpoints< + RetrieveResult extends _RetrieveResult = RetrieveClassResult, + RetrieveArg extends _RetrieveArg = RetrieveClassArg, + ListResult extends _ListResult = ListClassesResult, + ListArg extends _ListArg = ListClassesArg, +>(build: EndpointBuilder) { return { - retrieveClass: build.query({ + retrieveClass: build.query({ query: id => ({ url: buildUrl(urls.class.detail, { url: { id } }), method: "GET", }), providesTags: tagData(CLASS_TAG), }), - listClasses: build.query({ + listClasses: build.query({ query: search => ({ url: buildUrl(urls.class.list, { search }), method: "GET", diff --git a/src/api/endpoints/school.ts b/src/api/endpoints/school.ts index 75f0dd4..e84a854 100644 --- a/src/api/endpoints/school.ts +++ b/src/api/endpoints/school.ts @@ -3,8 +3,8 @@ import { type EndpointBuilder } from "@reduxjs/toolkit/query/react" import { buildUrl, tagData, - type RetrieveArg, - type RetrieveResult, + type RetrieveArg as _RetrieveArg, + type RetrieveResult as _RetrieveResult, } from "../../utils/api" import type { School } from "../models" import { type TagTypes } from "../tagTypes" @@ -12,17 +12,18 @@ import urls from "../urls" export const SCHOOL_TAG: TagTypes = "School" -export type RetrieveSchoolResult = RetrieveResult< +export type RetrieveSchoolResult = _RetrieveResult< School, "name" | "country" | "uk_county" > -export type RetrieveSchoolArg = RetrieveArg +export type RetrieveSchoolArg = _RetrieveArg -export default function getReadSchoolEndpoints( - build: EndpointBuilder, -) { +export default function getReadSchoolEndpoints< + RetrieveResult extends _RetrieveResult = RetrieveSchoolResult, + RetrieveArg extends _RetrieveArg = RetrieveSchoolArg, +>(build: EndpointBuilder) { return { - retrieveSchool: build.query({ + retrieveSchool: build.query({ query: id => ({ url: buildUrl(urls.school.detail, { url: { id } }), method: "GET", diff --git a/src/api/endpoints/user.ts b/src/api/endpoints/user.ts index b7fead0..5b6485d 100644 --- a/src/api/endpoints/user.ts +++ b/src/api/endpoints/user.ts @@ -3,10 +3,10 @@ import { type EndpointBuilder } from "@reduxjs/toolkit/query/react" import { buildUrl, tagData, - type ListArg, - type ListResult, - type RetrieveArg, - type RetrieveResult, + type ListArg as _ListArg, + type ListResult as _ListResult, + type RetrieveArg as _RetrieveArg, + type RetrieveResult as _RetrieveResult, } from "../../utils/api" import type { Class, User } from "../models" import { type TagTypes } from "../tagTypes" @@ -14,7 +14,7 @@ import urls from "../urls" export const USER_TAG: TagTypes = "User" -export type RetrieveUserResult = RetrieveResult< +export type RetrieveUserResult = _RetrieveResult< User, | "first_name" | "last_name" @@ -25,9 +25,9 @@ export type RetrieveUserResult = RetrieveResult< | "student" | "teacher" > -export type RetrieveUserArg = RetrieveArg +export type RetrieveUserArg = _RetrieveArg -export type ListUsersResult = ListResult< +export type ListUsersResult = _ListResult< User, | "first_name" | "last_name" @@ -38,25 +38,28 @@ export type ListUsersResult = ListResult< | "student" | "teacher" > -export type ListUsersArg = ListArg<{ +export type ListUsersArg = _ListArg<{ students_in_class: Class["id"] _id: User["id"] | User["id"][] name: string type: "teacher" | "student" | "independent" | "indy" }> -export default function getReadUserEndpoints( - build: EndpointBuilder, -) { +export default function getReadUserEndpoints< + RetrieveResult extends _RetrieveResult = RetrieveUserResult, + RetrieveArg extends _RetrieveArg = RetrieveUserArg, + ListResult extends _ListResult = ListUsersResult, + ListArg extends _ListArg = ListUsersArg, +>(build: EndpointBuilder) { return { - retrieveUser: build.query({ + retrieveUser: build.query({ query: id => ({ url: buildUrl(urls.user.detail, { url: { id } }), method: "GET", }), providesTags: tagData(USER_TAG), }), - listUsers: build.query({ + listUsers: build.query({ query: search => ({ url: buildUrl(urls.user.list, { search }), method: "GET",