All files / shared/types/api myProgramItems.ts

100% Statements 4/4
100% Branches 0/0
100% Functions 0/0
100% Lines 4/4

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120              39x                                                                 39x                                       39x                                                                         39x                                            
import { z } from "zod";
import { SIGNUP_MESSAGE_LENGTH } from "shared/constants/validation";
import { ApiError, ApiResult } from "shared/types/api/errors";
import { DirectSignup, LotterySignup } from "shared/types/models/user";
 
// POST lottery signup
 
export const PostLotterySignupRequestSchema = z.object({
  programItemId: z.string(),
  priority: z.number(),
});
 
export type PostLotterySignupRequest = z.infer<
  typeof PostLotterySignupRequestSchema
>;
 
export interface PostLotterySignupResult extends ApiResult {
  lotterySignups: readonly LotterySignup[];
}
 
export interface PostLotterySignupError extends ApiError {
  errorId:
    | "unknown"
    | "signupEnded"
    | "samePriority"
    | "invalidPriority"
    | "programItemNotFound"
    | "signupNotOpenYet"
    | "cancelled"
    | "noKonstiSignup"
    | "groupMember"
    | "hidden";
}
 
export type PostLotterySignupResponse =
  | PostLotterySignupResult
  | PostLotterySignupError;
 
// DELETE lottery signup
 
export const DeleteLotterySignupRequestSchema = z.object({
  lotterySignupProgramItemId: z.string(),
});
 
export type DeleteLotterySignupRequest = z.infer<
  typeof DeleteLotterySignupRequestSchema
>;
 
type DeleteLotterySignupResult = ApiResult;
 
export interface DeleteLotterySignupError extends ApiError {
  errorId: "unknown" | "signupEnded" | "programItemNotFound";
}
 
export type DeleteLotterySignupResponse =
  | DeleteLotterySignupResult
  | DeleteLotterySignupError;
 
// POST direct signup
 
export const PostDirectSignupRequestSchema = z.object({
  directSignupProgramItemId: z.string(),
  message: z.string().max(SIGNUP_MESSAGE_LENGTH, "Message too long"),
  // priority is not part of the request: user-made direct signups are always
  // first-come-first-served, so the backend sets DIRECT_SIGNUP_PRIORITY itself
});
 
export type PostDirectSignupRequest = z.infer<
  typeof PostDirectSignupRequestSchema
>;
 
export interface PostDirectSignupResult extends ApiResult {
  allSignups: {
    programItemId: string;
    userSignups: { username: string; message: string }[];
  };
  directSignup?: DirectSignup;
  // True when a direct signup made the user leave or close their group
  leftGroup: boolean;
}
 
export interface PostDirectSignupError extends ApiError {
  errorId:
    | "unknown"
    | "signupEnded"
    | "signupNotOpenYet"
    | "noKonstiSignup"
    | "cancelled"
    | "hidden";
}
 
export type PostDirectSignupResponse =
  | PostDirectSignupResult
  | PostDirectSignupError;
 
// DELETE direct signup
 
export const DeleteDirectSignupRequestSchema = z.object({
  directSignupProgramItemId: z.string(),
});
 
export type DeleteDirectSignupRequest = z.infer<
  typeof DeleteDirectSignupRequestSchema
>;
 
interface DeleteDirectSignupResult extends ApiResult {
  allSignups: {
    programItemId: string;
    userSignups: { username: string; message: string }[];
  };
}
 
interface DeleteDirectSignupError extends ApiError {
  errorId: "unknown" | "signupEnded";
}
 
export type DeleteDirectSignupResponse =
  | DeleteDirectSignupResult
  | DeleteDirectSignupError;