Skip to content

Commit

Permalink
export results and args
Browse files Browse the repository at this point in the history
  • Loading branch information
SKairinos committed Jul 22, 2024
1 parent 89d0aa6 commit 3fa0bc5
Show file tree
Hide file tree
Showing 9 changed files with 348 additions and 193 deletions.
30 changes: 21 additions & 9 deletions src/api/authFactor.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
import {
type AuthFactor,
getReadAuthFactorEndpoints,
urls,
} from "codeforlife/api"
import { type AuthFactor, urls } from "codeforlife/api"
import {
type CreateArg,
type CreateResult,
Expand All @@ -11,28 +7,44 @@ import {
buildUrl,
tagData,
} from "codeforlife/utils/api"
import getReadAuthFactorEndpoints, {
AUTH_FACTOR_TAG,
type ListAuthFactorsArg,
type ListAuthFactorsResult,
} from "codeforlife/api/endpoints/authFactor"

Check failure on line 14 in src/api/authFactor.ts

View workflow job for this annotation

GitHub Actions / main / test / test-js-code

Cannot find module 'codeforlife/api/endpoints/authFactor' or its corresponding type declarations.

Check failure on line 14 in src/api/authFactor.ts

View workflow job for this annotation

GitHub Actions / main / test / test-js-code

Cannot find module 'codeforlife/api/endpoints/authFactor' or its corresponding type declarations.

import api from "."

export type { ListAuthFactorsArg, ListAuthFactorsResult }

export type CreateAuthFactorResult = CreateResult<AuthFactor>
export type CreateAuthFactorArg = CreateArg<AuthFactor, "type">

export type DestroyAuthFactorResult = DestroyResult
export type DestroyAuthFactorArg = DestroyArg<AuthFactor>

const authFactorApi = api.injectEndpoints({
endpoints: build => ({
...getReadAuthFactorEndpoints(build),
createAuthFactor: build.mutation<
CreateResult<AuthFactor>,
CreateArg<AuthFactor, "type">
CreateAuthFactorResult,
CreateAuthFactorArg
>({
query: body => ({
url: urls.authFactor.list,
method: "POST",
body,
}),
}),
destroyAuthFactor: build.mutation<DestroyResult, DestroyArg<AuthFactor>>({
destroyAuthFactor: build.mutation<
DestroyAuthFactorResult,
DestroyAuthFactorArg
>({
query: id => ({
url: buildUrl(urls.authFactor.detail, { url: { id } }),
method: "DELETE",
}),
invalidatesTags: tagData("AuthFactor"),
invalidatesTags: tagData(AUTH_FACTOR_TAG),
}),
}),
})
Expand Down
57 changes: 37 additions & 20 deletions src/api/klass.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type Class, getReadClassEndpoints, urls } from "codeforlife/api"
import { type Class, urls } from "codeforlife/api"
import {
type CreateArg,
type CreateResult,
Expand All @@ -9,47 +9,64 @@ import {
buildUrl,
tagData,
} from "codeforlife/utils/api"
import getReadClassEndpoints, {
CLASS_TAG,
type ListClassesArg,
type ListClassesResult,
type RetrieveClassArg,
type RetrieveClassResult,
} from "codeforlife/api/endpoints/klass"

Check failure on line 18 in src/api/klass.ts

View workflow job for this annotation

GitHub Actions / main / test / test-js-code

Cannot find module 'codeforlife/api/endpoints/klass' or its corresponding type declarations.

Check failure on line 18 in src/api/klass.ts

View workflow job for this annotation

GitHub Actions / main / test / test-js-code

Cannot find module 'codeforlife/api/endpoints/klass' or its corresponding type declarations.

import api from "."

export type {
RetrieveClassArg,
RetrieveClassResult,
ListClassesArg,
ListClassesResult,
}

export type CreateClassResult = CreateResult<Class>
export type CreateClassArg = CreateArg<
Class,
"name" | "read_classmates_data",
"teacher" | "receive_requests_until"
>

export type DestroyClassResult = DestroyResult
export type DestroyClassArg = DestroyArg<Class>

export type UpdateClassResult = UpdateResult<Class>
export type UpdateClassArg = UpdateArg<
Class,
never,
"name" | "read_classmates_data" | "receive_requests_until" | "teacher"
>

const classApi = api.injectEndpoints({
endpoints: build => ({
...getReadClassEndpoints(build),
createClass: build.mutation<
CreateResult<Class>,
CreateArg<
Class,
"name" | "read_classmates_data",
"teacher" | "receive_requests_until"
>
>({
createClass: build.mutation<CreateClassResult, CreateClassArg>({
query: body => ({
url: urls.class.list,
method: "POST",
body,
}),
}),
destroyClass: build.mutation<DestroyResult, DestroyArg<Class>>({
destroyClass: build.mutation<DestroyClassResult, DestroyClassArg>({
query: id => ({
url: buildUrl(urls.class.detail, { url: { id } }),
method: "DELETE",
}),
invalidatesTags: tagData("Class"),
invalidatesTags: tagData(CLASS_TAG),
}),
updateClass: build.mutation<
UpdateResult<Class>,
UpdateArg<
Class,
never,
"name" | "read_classmates_data" | "receive_requests_until" | "teacher"
>
>({
updateClass: build.mutation<UpdateClassResult, UpdateClassArg>({
query: ([id, body]) => ({
url: buildUrl(urls.class.detail, { url: { id } }),
method: "PATCH",
body,
}),
invalidatesTags: tagData("Class"),
invalidatesTags: tagData(CLASS_TAG),
}),
}),
})
Expand Down
8 changes: 7 additions & 1 deletion src/api/otpBypassToken.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,15 @@ import { urls } from "codeforlife/api"

import api from "."

export type GenerateOtpBypassTokensResult = string[]
export type GenerateOtpBypassTokensArg = null

const otpBypassTokenApi = api.injectEndpoints({
endpoints: build => ({
generateOtpBypassTokens: build.mutation<string[], null>({
generateOtpBypassTokens: build.mutation<
GenerateOtpBypassTokensResult,
GenerateOtpBypassTokensArg
>({
query: () => ({
url: urls.otpBypassToken.list,
method: "POST",
Expand Down
31 changes: 21 additions & 10 deletions src/api/school.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,44 @@ import {
buildUrl,
tagData,
} from "codeforlife/utils/api"
import { type School, getReadSchoolEndpoints, urls } from "codeforlife/api"
import { type School, urls } from "codeforlife/api"
import getReadSchoolEndpoints, {
type RetrieveSchoolArg,
type RetrieveSchoolResult,
SCHOOL_TAG,
} from "codeforlife/api/endpoints/school"

Check failure on line 14 in src/api/school.ts

View workflow job for this annotation

GitHub Actions / main / test / test-js-code

Cannot find module 'codeforlife/api/endpoints/school' or its corresponding type declarations.

Check failure on line 14 in src/api/school.ts

View workflow job for this annotation

GitHub Actions / main / test / test-js-code

Cannot find module 'codeforlife/api/endpoints/school' or its corresponding type declarations.

import api from "."

export type { RetrieveSchoolArg, RetrieveSchoolResult }

export type CreateSchoolResult = CreateResult<School>
export type CreateSchoolArg = CreateArg<School, "name", "country" | "uk_county">

export type UpdateSchoolResult = UpdateResult<School>
export type UpdateSchoolArg = UpdateArg<
School,
never,
"name" | "country" | "uk_county"
>

const schoolApi = api.injectEndpoints({
endpoints: build => ({
...getReadSchoolEndpoints(build),
createSchool: build.mutation<
CreateResult<School>,
CreateArg<School, "name", "country" | "uk_county">
>({
createSchool: build.mutation<CreateSchoolResult, CreateSchoolArg>({
query: body => ({
url: urls.school.list,
method: "POST",
body,
}),
}),
updateSchool: build.mutation<
UpdateResult<School>,
UpdateArg<School, never, "name" | "country" | "uk_county">
>({
updateSchool: build.mutation<UpdateSchoolResult, UpdateSchoolArg>({
query: ([id, body]) => ({
url: buildUrl(urls.school.detail, { url: { id } }),
method: "PATCH",
body,
}),
invalidatesTags: tagData("School"),
invalidatesTags: tagData(SCHOOL_TAG),
}),
}),
})
Expand Down
113 changes: 71 additions & 42 deletions src/api/schoolTeacherInvitation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,22 +29,71 @@ export type SchoolTeacherInvitation = Model<
}
>

export type AcceptSchoolTeacherInvitationResult = null
export type AcceptSchoolTeacherInvitationArg = [
SchoolTeacherInvitation["id"],
{
user?: Arg<User, "first_name" | "last_name" | "password" | "email"> & {
add_to_newsletter: boolean
}
},
]

export type RejectSchoolTeacherInvitationResult = null
export type RejectSchoolTeacherInvitationArg = SchoolTeacherInvitation["id"]

export type RefreshSchoolTeacherInvitationResult = UpdateResult<
SchoolTeacherInvitation,
"expires_at"
>
export type RefreshSchoolTeacherInvitationArg =
UpdateArg<SchoolTeacherInvitation>

export type CreateSchoolTeacherInvitationResult = CreateResult<
SchoolTeacherInvitation,
"expires_at"
>
export type CreateSchoolTeacherInvitationArg = CreateArg<
SchoolTeacherInvitation,
| "invited_teacher_email"
| "invited_teacher_first_name"
| "invited_teacher_last_name"
| "invited_teacher_is_admin"
>

export type DestroySchoolTeacherInvitationResult = DestroyResult
export type DestroySchoolTeacherInvitationArg =
DestroyArg<SchoolTeacherInvitation>

export type RetrieveSchoolTeacherInvitationResult = RetrieveResult<
SchoolTeacherInvitation,
| "expires_at"
| "invited_teacher_email"
| "invited_teacher_first_name"
| "invited_teacher_last_name"
| "invited_teacher_is_admin"
>
export type RetrieveSchoolTeacherInvitationArg =
RetrieveArg<SchoolTeacherInvitation>

export type ListSchoolTeacherInvitationsResult = ListResult<
SchoolTeacherInvitation,
| "expires_at"
| "invited_teacher_email"
| "invited_teacher_first_name"
| "invited_teacher_last_name"
| "invited_teacher_is_admin"
>
export type ListSchoolTeacherInvitationsArg = ListArg

const listUrl = "schools/teacher-invitations/"
const detailUrl = listUrl + "<id>/"

const schoolTeacherInvitationApi = api.injectEndpoints({
endpoints: build => ({
acceptSchoolTeacherInvitation: build.mutation<
null,
[
SchoolTeacherInvitation["id"],
{
user?: Arg<
User,
"first_name" | "last_name" | "password" | "email"
> & { add_to_newsletter: boolean }
},
]
AcceptSchoolTeacherInvitationResult,
AcceptSchoolTeacherInvitationArg
>({
query: ([id, body]) => ({
url: buildUrl(detailUrl + "accept/", { url: { id } }),
Expand All @@ -54,8 +103,8 @@ const schoolTeacherInvitationApi = api.injectEndpoints({
invalidatesTags: tagData("SchoolTeacherInvitation"),
}),
rejectSchoolTeacherInvitation: build.mutation<
null,
SchoolTeacherInvitation["id"]
RejectSchoolTeacherInvitationResult,
RejectSchoolTeacherInvitationArg
>({
query: id => ({
url: buildUrl(detailUrl + "reject/", { url: { id } }),
Expand All @@ -64,8 +113,8 @@ const schoolTeacherInvitationApi = api.injectEndpoints({
invalidatesTags: tagData("SchoolTeacherInvitation"),
}),
refreshSchoolTeacherInvitation: build.mutation<
UpdateResult<SchoolTeacherInvitation, "expires_at">,
UpdateArg<SchoolTeacherInvitation>
RefreshSchoolTeacherInvitationResult,
RefreshSchoolTeacherInvitationArg
>({
query: id => ({
url: buildUrl(detailUrl, { url: { id } }),
Expand All @@ -74,14 +123,8 @@ const schoolTeacherInvitationApi = api.injectEndpoints({
invalidatesTags: tagData("SchoolTeacherInvitation"),
}),
createSchoolTeacherInvitation: build.mutation<
CreateResult<SchoolTeacherInvitation, "expires_at">,
CreateArg<
SchoolTeacherInvitation,
| "invited_teacher_email"
| "invited_teacher_first_name"
| "invited_teacher_last_name"
| "invited_teacher_is_admin"
>
CreateSchoolTeacherInvitationResult,
CreateSchoolTeacherInvitationArg
>({
query: body => ({
url: listUrl,
Expand All @@ -90,8 +133,8 @@ const schoolTeacherInvitationApi = api.injectEndpoints({
}),
}),
destroySchoolTeacherInvitation: build.mutation<
DestroyResult,
DestroyArg<SchoolTeacherInvitation>
DestroySchoolTeacherInvitationResult,
DestroySchoolTeacherInvitationArg
>({
query: id => ({
url: buildUrl(detailUrl, { url: { id } }),
Expand All @@ -100,15 +143,8 @@ const schoolTeacherInvitationApi = api.injectEndpoints({
invalidatesTags: tagData("SchoolTeacherInvitation"),
}),
retrieveSchoolTeacherInvitation: build.query<
RetrieveResult<
SchoolTeacherInvitation,
| "expires_at"
| "invited_teacher_email"
| "invited_teacher_first_name"
| "invited_teacher_last_name"
| "invited_teacher_is_admin"
>,
RetrieveArg<SchoolTeacherInvitation>
RetrieveSchoolTeacherInvitationResult,
RetrieveSchoolTeacherInvitationArg
>({
query: id => ({
url: buildUrl(detailUrl, { url: { id } }),
Expand All @@ -117,15 +153,8 @@ const schoolTeacherInvitationApi = api.injectEndpoints({
providesTags: tagData("SchoolTeacherInvitation"),
}),
listSchoolTeacherInvitations: build.query<
ListResult<
SchoolTeacherInvitation,
| "expires_at"
| "invited_teacher_email"
| "invited_teacher_first_name"
| "invited_teacher_last_name"
| "invited_teacher_is_admin"
>,
ListArg
ListSchoolTeacherInvitationsResult,
ListSchoolTeacherInvitationsArg
>({
query: search => ({
url: buildUrl(listUrl, { search }),
Expand Down
Loading

0 comments on commit 3fa0bc5

Please sign in to comment.