chukyo-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +227 -0
- package/dist/cjs/albo/client.js +133 -0
- package/dist/cjs/albo/index.js +55 -0
- package/dist/cjs/albo/parser/albo.js +110 -0
- package/dist/cjs/albo/types/albo.js +351 -0
- package/dist/cjs/albo/types/alboCalendar.js +51 -0
- package/dist/cjs/albo/types/alboCommon.js +55 -0
- package/dist/cjs/albo/types/alboInformation.js +136 -0
- package/dist/cjs/albo/types/alboMenu.js +92 -0
- package/dist/cjs/albo/types/alboQuestionnaire.js +229 -0
- package/dist/cjs/albo/types/alboSharedItem.js +137 -0
- package/dist/cjs/albo/types/alboSystem.js +103 -0
- package/dist/cjs/albo/types/alboUniversalForm.js +51 -0
- package/dist/cjs/common/dom.js +137 -0
- package/dist/cjs/common/utils.js +29 -0
- package/dist/cjs/constants.js +127 -0
- package/dist/cjs/core/request.js +39 -0
- package/dist/cjs/cubics/client.js +49 -0
- package/dist/cjs/cubics/index.js +22 -0
- package/dist/cjs/cubics/parser/cubics.js +103 -0
- package/dist/cjs/cubics/types/cubics.js +90 -0
- package/dist/cjs/errors.js +55 -0
- package/dist/cjs/index.js +50 -0
- package/dist/cjs/manabo/client.js +135 -0
- package/dist/cjs/manabo/index.js +44 -0
- package/dist/cjs/manabo/parser/manaboClass.js +386 -0
- package/dist/cjs/manabo/parser/manaboEntry.js +38 -0
- package/dist/cjs/manabo/parser/manaboMail.js +153 -0
- package/dist/cjs/manabo/parser/manaboNews.js +26 -0
- package/dist/cjs/manabo/parser/manaboTimetable.js +93 -0
- package/dist/cjs/manabo/types/manaboClass.js +223 -0
- package/dist/cjs/manabo/types/manaboEntry.js +43 -0
- package/dist/cjs/manabo/types/manaboMail.js +117 -0
- package/dist/cjs/manabo/types/manaboNews.js +20 -0
- package/dist/cjs/manabo/types/manaboTimetable.js +79 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/shib/builder.js +239 -0
- package/dist/cjs/shib/index.js +32 -0
- package/dist/cjs/shib/parser/shibLogin.js +138 -0
- package/dist/cjs/shib/parser/shibUser.js +51 -0
- package/dist/cjs/shib/types/common.js +2 -0
- package/dist/cjs/shib/types/shibLogin.js +92 -0
- package/dist/cjs/shib/types/shibUser.js +44 -0
- package/dist/cjs/transports/fetch.js +84 -0
- package/dist/cjs/types.js +9 -0
- package/dist/esm/albo/client.d.ts +80 -0
- package/dist/esm/albo/client.d.ts.map +1 -0
- package/dist/esm/albo/client.js +129 -0
- package/dist/esm/albo/index.d.ts +12 -0
- package/dist/esm/albo/index.d.ts.map +1 -0
- package/dist/esm/albo/index.js +11 -0
- package/dist/esm/albo/parser/albo.d.ts +69 -0
- package/dist/esm/albo/parser/albo.d.ts.map +1 -0
- package/dist/esm/albo/parser/albo.js +84 -0
- package/dist/esm/albo/types/albo.d.ts +460 -0
- package/dist/esm/albo/types/albo.d.ts.map +1 -0
- package/dist/esm/albo/types/albo.js +348 -0
- package/dist/esm/albo/types/alboCalendar.d.ts +58 -0
- package/dist/esm/albo/types/alboCalendar.d.ts.map +1 -0
- package/dist/esm/albo/types/alboCalendar.js +48 -0
- package/dist/esm/albo/types/alboCommon.d.ts +52 -0
- package/dist/esm/albo/types/alboCommon.d.ts.map +1 -0
- package/dist/esm/albo/types/alboCommon.js +51 -0
- package/dist/esm/albo/types/alboInformation.d.ts +214 -0
- package/dist/esm/albo/types/alboInformation.d.ts.map +1 -0
- package/dist/esm/albo/types/alboInformation.js +133 -0
- package/dist/esm/albo/types/alboMenu.d.ts +114 -0
- package/dist/esm/albo/types/alboMenu.d.ts.map +1 -0
- package/dist/esm/albo/types/alboMenu.js +89 -0
- package/dist/esm/albo/types/alboQuestionnaire.d.ts +442 -0
- package/dist/esm/albo/types/alboQuestionnaire.d.ts.map +1 -0
- package/dist/esm/albo/types/alboQuestionnaire.js +226 -0
- package/dist/esm/albo/types/alboSharedItem.d.ts +205 -0
- package/dist/esm/albo/types/alboSharedItem.d.ts.map +1 -0
- package/dist/esm/albo/types/alboSharedItem.js +134 -0
- package/dist/esm/albo/types/alboSystem.d.ts +129 -0
- package/dist/esm/albo/types/alboSystem.d.ts.map +1 -0
- package/dist/esm/albo/types/alboSystem.js +100 -0
- package/dist/esm/albo/types/alboUniversalForm.d.ts +63 -0
- package/dist/esm/albo/types/alboUniversalForm.d.ts.map +1 -0
- package/dist/esm/albo/types/alboUniversalForm.js +48 -0
- package/dist/esm/common/dom.d.ts +35 -0
- package/dist/esm/common/dom.d.ts.map +1 -0
- package/dist/esm/common/dom.js +120 -0
- package/dist/esm/common/utils.d.ts +15 -0
- package/dist/esm/common/utils.d.ts.map +1 -0
- package/dist/esm/common/utils.js +22 -0
- package/dist/esm/constants.d.ts +113 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js +124 -0
- package/dist/esm/core/request.d.ts +29 -0
- package/dist/esm/core/request.d.ts.map +1 -0
- package/dist/esm/core/request.js +33 -0
- package/dist/esm/cubics/client.d.ts +13 -0
- package/dist/esm/cubics/client.d.ts.map +1 -0
- package/dist/esm/cubics/client.js +45 -0
- package/dist/esm/cubics/index.d.ts +4 -0
- package/dist/esm/cubics/index.d.ts.map +1 -0
- package/dist/esm/cubics/index.js +3 -0
- package/dist/esm/cubics/parser/cubics.d.ts +8 -0
- package/dist/esm/cubics/parser/cubics.d.ts.map +1 -0
- package/dist/esm/cubics/parser/cubics.js +99 -0
- package/dist/esm/cubics/types/cubics.d.ts +94 -0
- package/dist/esm/cubics/types/cubics.d.ts.map +1 -0
- package/dist/esm/cubics/types/cubics.js +87 -0
- package/dist/esm/errors.d.ts +46 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +46 -0
- package/dist/esm/index.d.ts +19 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +25 -0
- package/dist/esm/manabo/client.d.ts +75 -0
- package/dist/esm/manabo/client.d.ts.map +1 -0
- package/dist/esm/manabo/client.js +131 -0
- package/dist/esm/manabo/index.d.ts +12 -0
- package/dist/esm/manabo/index.d.ts.map +1 -0
- package/dist/esm/manabo/index.js +11 -0
- package/dist/esm/manabo/parser/manaboClass.d.ts +9 -0
- package/dist/esm/manabo/parser/manaboClass.d.ts.map +1 -0
- package/dist/esm/manabo/parser/manaboClass.js +377 -0
- package/dist/esm/manabo/parser/manaboEntry.d.ts +8 -0
- package/dist/esm/manabo/parser/manaboEntry.d.ts.map +1 -0
- package/dist/esm/manabo/parser/manaboEntry.js +33 -0
- package/dist/esm/manabo/parser/manaboMail.d.ts +8 -0
- package/dist/esm/manabo/parser/manaboMail.d.ts.map +1 -0
- package/dist/esm/manabo/parser/manaboMail.js +145 -0
- package/dist/esm/manabo/parser/manaboNews.d.ts +7 -0
- package/dist/esm/manabo/parser/manaboNews.d.ts.map +1 -0
- package/dist/esm/manabo/parser/manaboNews.js +22 -0
- package/dist/esm/manabo/parser/manaboTimetable.d.ts +4 -0
- package/dist/esm/manabo/parser/manaboTimetable.d.ts.map +1 -0
- package/dist/esm/manabo/parser/manaboTimetable.js +89 -0
- package/dist/esm/manabo/types/manaboClass.d.ts +294 -0
- package/dist/esm/manabo/types/manaboClass.d.ts.map +1 -0
- package/dist/esm/manabo/types/manaboClass.js +220 -0
- package/dist/esm/manabo/types/manaboEntry.d.ts +24 -0
- package/dist/esm/manabo/types/manaboEntry.d.ts.map +1 -0
- package/dist/esm/manabo/types/manaboEntry.js +40 -0
- package/dist/esm/manabo/types/manaboMail.d.ts +103 -0
- package/dist/esm/manabo/types/manaboMail.d.ts.map +1 -0
- package/dist/esm/manabo/types/manaboMail.js +114 -0
- package/dist/esm/manabo/types/manaboNews.d.ts +15 -0
- package/dist/esm/manabo/types/manaboNews.d.ts.map +1 -0
- package/dist/esm/manabo/types/manaboNews.js +17 -0
- package/dist/esm/manabo/types/manaboTimetable.d.ts +88 -0
- package/dist/esm/manabo/types/manaboTimetable.d.ts.map +1 -0
- package/dist/esm/manabo/types/manaboTimetable.js +76 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/shib/builder.d.ts +154 -0
- package/dist/esm/shib/builder.d.ts.map +1 -0
- package/dist/esm/shib/builder.js +212 -0
- package/dist/esm/shib/index.d.ts +15 -0
- package/dist/esm/shib/index.d.ts.map +1 -0
- package/dist/esm/shib/index.js +14 -0
- package/dist/esm/shib/parser/shibLogin.d.ts +47 -0
- package/dist/esm/shib/parser/shibLogin.d.ts.map +1 -0
- package/dist/esm/shib/parser/shibLogin.js +127 -0
- package/dist/esm/shib/parser/shibUser.d.ts +11 -0
- package/dist/esm/shib/parser/shibUser.d.ts.map +1 -0
- package/dist/esm/shib/parser/shibUser.js +46 -0
- package/dist/esm/shib/types/common.d.ts +20 -0
- package/dist/esm/shib/types/common.d.ts.map +1 -0
- package/dist/esm/shib/types/common.js +1 -0
- package/dist/esm/shib/types/shibLogin.d.ts +62 -0
- package/dist/esm/shib/types/shibLogin.d.ts.map +1 -0
- package/dist/esm/shib/types/shibLogin.js +89 -0
- package/dist/esm/shib/types/shibUser.d.ts +36 -0
- package/dist/esm/shib/types/shibUser.d.ts.map +1 -0
- package/dist/esm/shib/types/shibUser.js +41 -0
- package/dist/esm/transports/fetch.d.ts +36 -0
- package/dist/esm/transports/fetch.d.ts.map +1 -0
- package/dist/esm/transports/fetch.js +80 -0
- package/dist/esm/types.d.ts +71 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +8 -0
- package/package.json +72 -0
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { alboEnvelope, paginationShape } from "./alboCommon";
|
|
3
|
+
// albo の各 API レスポンスをそのまま検証・保持するスキーマ群。
|
|
4
|
+
// フィールド名は API が返すキーそのまま、値は無変換で通す(パススルー)。
|
|
5
|
+
// --- カレンダー(学年暦) ---------------------------------------------------
|
|
6
|
+
/** 学年暦カレンダーの 1 イベント */
|
|
7
|
+
export const AlboCalendarItemSchema = z.object({
|
|
8
|
+
/** カレンダーソースの UUID @example "ac304d66-b0a8-11f0-afed-06347f3ce845" */
|
|
9
|
+
calendar_source_uuid: z.string().meta({ description: "カレンダーソースの UUID", example: "ac304d66-b0a8-11f0-afed-06347f3ce845" }),
|
|
10
|
+
/** イベント名 @example "天皇誕生日(祝日)" */
|
|
11
|
+
summary: z.string().meta({ description: "イベント名", example: "天皇誕生日(祝日)" }),
|
|
12
|
+
/** 補足説明(無ければ null) @example "全学休講" */
|
|
13
|
+
description: z.string().nullable().meta({ description: "補足説明", example: "全学休講" }),
|
|
14
|
+
/** 開始日時(UNIX 秒) @example 1783445975 */
|
|
15
|
+
start_at: z.number().meta({ description: "開始日時(UNIX 秒)", example: 1783445975 }),
|
|
16
|
+
/** 終了日時(UNIX 秒) @example 1783532375 */
|
|
17
|
+
end_at: z.number().meta({ description: "終了日時(UNIX 秒)", example: 1783532375 }),
|
|
18
|
+
/** 作成日時(UNIX 秒) @example 1700000000 */
|
|
19
|
+
created_at: z.number().meta({ description: "作成日時(UNIX 秒)", example: 1700000000 }),
|
|
20
|
+
});
|
|
21
|
+
/** 学年暦カレンダー取得 API のレスポンス全体 */
|
|
22
|
+
export const AlboCalendarSchema = alboEnvelope(z.object({
|
|
23
|
+
...paginationShape,
|
|
24
|
+
/** カレンダー名 @example "学年暦(学部)" */
|
|
25
|
+
source_name: z.string().meta({ description: "カレンダー名", example: "学年暦(学部)" }),
|
|
26
|
+
/** イベント配列 */
|
|
27
|
+
items: z.array(AlboCalendarItemSchema).meta({ description: "イベント配列" }),
|
|
28
|
+
}));
|
|
29
|
+
// --- 時間割 -----------------------------------------------------------------
|
|
30
|
+
/** 時間割項目に付くバッジ(学期区分など) */
|
|
31
|
+
export const AlboTimetableBadgeSchema = z.object({
|
|
32
|
+
/** 学期表記 @example "春学期" */
|
|
33
|
+
term: z.string().meta({ description: "学期表記", example: "春学期" }),
|
|
34
|
+
});
|
|
35
|
+
/** 時間割の 1 コマ(授業の 1 開講回) */
|
|
36
|
+
export const AlboTimetableItemSchema = z.object({
|
|
37
|
+
/** コマの UUID @example "11111111-2222-3333-4444-555555555555" */
|
|
38
|
+
uuid: z.string().meta({ description: "コマの UUID", example: "11111111-2222-3333-4444-555555555555" }),
|
|
39
|
+
/** コマの ID @example "123456" */
|
|
40
|
+
id: z.string().meta({ description: "コマの ID", example: "123456" }),
|
|
41
|
+
/** 実施日 @example "2025-06-16" */
|
|
42
|
+
execute_date: z.string().meta({ description: "実施日", example: "2025-06-16" }),
|
|
43
|
+
/** 曜日(0=日 〜 6=土) @example 1 */
|
|
44
|
+
day_of_week: z.number().meta({ description: "曜日(0=日〜6=土)", example: 1 }),
|
|
45
|
+
/** 時限番号 @example 2 */
|
|
46
|
+
time_number: z.number().meta({ description: "時限番号", example: 2 }),
|
|
47
|
+
/** 授業 ID @example "20250001" */
|
|
48
|
+
class_id: z.string().meta({ description: "授業 ID", example: "20250001" }),
|
|
49
|
+
/** 授業名 @example "情報リテラシー" */
|
|
50
|
+
class_name: z.string().meta({ description: "授業名", example: "情報リテラシー" }),
|
|
51
|
+
/** 学期表記 @example "春学期" */
|
|
52
|
+
term: z.string().meta({ description: "学期表記", example: "春学期" }),
|
|
53
|
+
/** キャンパス @example "名古屋" */
|
|
54
|
+
campus: z.string().meta({ description: "キャンパス", example: "名古屋" }),
|
|
55
|
+
/** 担当教員 @example "中京 一郎" */
|
|
56
|
+
teacher: z.string().meta({ description: "担当教員", example: "中京 一郎" }),
|
|
57
|
+
/** 教室(無ければ null) @example "0号館5F" */
|
|
58
|
+
room: z.string().nullable().meta({ description: "教室", example: "0号館5F" }),
|
|
59
|
+
/** メモ @example "" */
|
|
60
|
+
memo: z.string().meta({ description: "メモ", example: "" }),
|
|
61
|
+
/** 任意オプション(未使用時 null) */
|
|
62
|
+
options: z.unknown().nullable().meta({ description: "任意オプション" }),
|
|
63
|
+
/** 作成日時(UNIX 秒) @example 1700000000 */
|
|
64
|
+
created_at: z.number().meta({ description: "作成日時(UNIX 秒)", example: 1700000000 }),
|
|
65
|
+
/** 実施年度 @example "2025" */
|
|
66
|
+
execute_school_year: z.string().meta({ description: "実施年度", example: "2025" }),
|
|
67
|
+
/** 授業種別(数値コード) @example 0 */
|
|
68
|
+
class_type: z.number().meta({ description: "授業種別(数値コード)", example: 0 }),
|
|
69
|
+
/** メモ(英語。無ければ null) @example null */
|
|
70
|
+
memo_en: z.string().nullable().meta({ description: "メモ(英語)", example: null }),
|
|
71
|
+
/** オプション(英語。未使用時 null) */
|
|
72
|
+
options_en: z.unknown().nullable().meta({ description: "オプション(英語)" }),
|
|
73
|
+
/** 表示順 @example 0 */
|
|
74
|
+
order: z.number().meta({ description: "表示順", example: 0 }),
|
|
75
|
+
/** バッジ情報 */
|
|
76
|
+
badge: AlboTimetableBadgeSchema,
|
|
77
|
+
/** 学期表記(英語) @example "Spring" */
|
|
78
|
+
term_en: z.string().meta({ description: "学期表記(英語)", example: "Spring" }),
|
|
79
|
+
/** 授業名(英語) @example "Information Literacy" */
|
|
80
|
+
class_name_en: z.string().meta({ description: "授業名(英語)", example: "Information Literacy" }),
|
|
81
|
+
/** キャンパス(英語) @example "Nagoya" */
|
|
82
|
+
campus_en: z.string().meta({ description: "キャンパス(英語)", example: "Nagoya" }),
|
|
83
|
+
/** 休講情報の配列 */
|
|
84
|
+
cancels: z.array(z.unknown()).meta({ description: "休講情報の配列" }),
|
|
85
|
+
/** 補講情報の配列 */
|
|
86
|
+
extras: z.array(z.unknown()).meta({ description: "補講情報の配列" }),
|
|
87
|
+
/** 変更情報の配列 */
|
|
88
|
+
changes: z.array(z.unknown()).meta({ description: "変更情報の配列" }),
|
|
89
|
+
});
|
|
90
|
+
/** 時間割取得 API のレスポンス全体 */
|
|
91
|
+
export const AlboTimetableSchema = alboEnvelope(z.object({
|
|
92
|
+
/** 時間割の種別 @example "student" */
|
|
93
|
+
time_table_type: z.string().meta({ description: "時間割の種別", example: "student" }),
|
|
94
|
+
...paginationShape,
|
|
95
|
+
/** 時間割コマの配列 */
|
|
96
|
+
items: z.array(AlboTimetableItemSchema).meta({ description: "時間割コマの配列" }),
|
|
97
|
+
}));
|
|
98
|
+
// --- お知らせ ---------------------------------------------------------------
|
|
99
|
+
/** お知らせのカテゴリ */
|
|
100
|
+
export const AlboInformationCategorySchema = z.object({
|
|
101
|
+
/** カテゴリ UUID @example "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" */
|
|
102
|
+
uuid: z.string().meta({ description: "カテゴリ UUID", example: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" }),
|
|
103
|
+
/** カテゴリ名 @example "教務課からのお知らせ" */
|
|
104
|
+
name: z.string().meta({ description: "カテゴリ名", example: "教務課からのお知らせ" }),
|
|
105
|
+
/** カテゴリ名(英語。無ければ null) @example null */
|
|
106
|
+
name_en: z.string().nullable().meta({ description: "カテゴリ名(英語)", example: null }),
|
|
107
|
+
/** 説明(無ければ null) @example null */
|
|
108
|
+
description: z.string().nullable().meta({ description: "説明", example: null }),
|
|
109
|
+
/** 説明(英語。無ければ null) @example null */
|
|
110
|
+
description_en: z.string().nullable().meta({ description: "説明(英語)", example: null }),
|
|
111
|
+
/** 表示順 @example 0 */
|
|
112
|
+
order: z.number().meta({ description: "表示順", example: 0 }),
|
|
113
|
+
/** ゲスト向けに公開するか @example false */
|
|
114
|
+
is_for_guest: z.boolean().meta({ description: "ゲスト向けに公開するか", example: false }),
|
|
115
|
+
/** 作成者 @example "system" */
|
|
116
|
+
created_by: z.string().meta({ description: "作成者", example: "system" }),
|
|
117
|
+
/** 更新者(無ければ null) @example null */
|
|
118
|
+
updated_by: z.string().nullable().meta({ description: "更新者", example: null }),
|
|
119
|
+
/** 作成日時(UNIX 秒) @example 1700000000 */
|
|
120
|
+
created_at: z.number().meta({ description: "作成日時(UNIX 秒)", example: 1700000000 }),
|
|
121
|
+
/** 更新日時(UNIX 秒) @example 1700000000 */
|
|
122
|
+
updated_at: z.number().meta({ description: "更新日時(UNIX 秒)", example: 1700000000 }),
|
|
123
|
+
});
|
|
124
|
+
/** お知らせに添付されるファイル */
|
|
125
|
+
export const AlboInformationFileSchema = z.object({
|
|
126
|
+
/** ファイル UUID @example "ffffffff-1111-2222-3333-444444444444" */
|
|
127
|
+
uuid: z.string().meta({ description: "ファイル UUID", example: "ffffffff-1111-2222-3333-444444444444" }),
|
|
128
|
+
/** ファイル名 @example "履修案内.pdf" */
|
|
129
|
+
file_name: z.string().meta({ description: "ファイル名", example: "履修案内.pdf" }),
|
|
130
|
+
/** MIME タイプ @example "application/pdf" */
|
|
131
|
+
mime_type: z.string().meta({ description: "MIME タイプ", example: "application/pdf" }),
|
|
132
|
+
/** サムネイル存在フラグ @example false */
|
|
133
|
+
is_thumb_exists: z.boolean().meta({ description: "サムネイル存在フラグ", example: false }),
|
|
134
|
+
/** 作成者 @example "system" */
|
|
135
|
+
created_by: z.string().meta({ description: "作成者", example: "system" }),
|
|
136
|
+
/** 作成日時(UNIX 秒) @example 1700000000 */
|
|
137
|
+
created_at: z.number().meta({ description: "作成日時(UNIX 秒)", example: 1700000000 }),
|
|
138
|
+
});
|
|
139
|
+
/** お知らせ 1 件 */
|
|
140
|
+
export const AlboInformationItemSchema = z.object({
|
|
141
|
+
/** お知らせ UUID @example "12345678-90ab-cdef-1234-567890abcdef" */
|
|
142
|
+
uuid: z.string().meta({ description: "お知らせ UUID", example: "12345678-90ab-cdef-1234-567890abcdef" }),
|
|
143
|
+
/** 発信元(部署名など) @example "教務課" */
|
|
144
|
+
publish_from: z.string().meta({ description: "発信元", example: "教務課" }),
|
|
145
|
+
/** 発信元(英語。無ければ null) @example null */
|
|
146
|
+
publish_from_en: z.string().nullable().meta({ description: "発信元(英語)", example: null }),
|
|
147
|
+
/** 発信部署(英語。無ければ null) @example null */
|
|
148
|
+
publish_department_en: z.string().nullable().meta({ description: "発信部署(英語)", example: null }),
|
|
149
|
+
/** 掲載開始日時(UNIX 秒) @example 1783445975 */
|
|
150
|
+
publish_start_at: z.number().meta({ description: "掲載開始日時(UNIX 秒)", example: 1783445975 }),
|
|
151
|
+
/** 掲載終了日時(UNIX 秒) @example 1785000000 */
|
|
152
|
+
publish_end_at: z.number().meta({ description: "掲載終了日時(UNIX 秒)", example: 1785000000 }),
|
|
153
|
+
/** タイトル @example "定期試験の実施について" */
|
|
154
|
+
title: z.string().meta({ description: "タイトル", example: "定期試験の実施について" }),
|
|
155
|
+
/** タイトル(英語。無ければ null) @example null */
|
|
156
|
+
title_en: z.string().nullable().meta({ description: "タイトル(英語)", example: null }),
|
|
157
|
+
/** 本文(HTML) @example "<p>本文...</p>" */
|
|
158
|
+
content: z.string().meta({ description: "本文(HTML)", example: "<p>本文...</p>" }),
|
|
159
|
+
/** 本文(英語。無ければ null) @example null */
|
|
160
|
+
content_en: z.string().nullable().meta({ description: "本文(英語)", example: null }),
|
|
161
|
+
/** 優先度 @example 0 */
|
|
162
|
+
priority: z.number().meta({ description: "優先度", example: 0 }),
|
|
163
|
+
/** イベント名(無ければ null) @example null */
|
|
164
|
+
event_title: z.string().nullable().meta({ description: "イベント名", example: null }),
|
|
165
|
+
/** イベント名(英語。無ければ null) @example null */
|
|
166
|
+
event_title_en: z.string().nullable().meta({ description: "イベント名(英語)", example: null }),
|
|
167
|
+
/** イベント開始日時(UNIX 秒。無ければ null) @example null */
|
|
168
|
+
event_start_at: z.number().nullable().meta({ description: "イベント開始日時(UNIX 秒)", example: null }),
|
|
169
|
+
/** イベント終了日時(UNIX 秒。無ければ null) @example null */
|
|
170
|
+
event_end_at: z.number().nullable().meta({ description: "イベント終了日時(UNIX 秒)", example: null }),
|
|
171
|
+
/** メール通知を送るか(0/1) @example 0 */
|
|
172
|
+
is_send_mail_notification: z.number().meta({ description: "メール通知を送るか(0/1)", example: 0 }),
|
|
173
|
+
/** 通知メールの差出人(無ければ null) @example null */
|
|
174
|
+
mail_from: z.string().nullable().meta({ description: "通知メールの差出人", example: null }),
|
|
175
|
+
/** 任意オプション(未使用時 null) */
|
|
176
|
+
options: z.unknown().nullable().meta({ description: "任意オプション" }),
|
|
177
|
+
/** 作成者 @example "kyomu" */
|
|
178
|
+
created_by: z.string().meta({ description: "作成者", example: "kyomu" }),
|
|
179
|
+
/** 更新者(無ければ null) @example null */
|
|
180
|
+
updated_by: z.string().nullable().meta({ description: "更新者", example: null }),
|
|
181
|
+
/** 作成日時(UNIX 秒) @example 1700000000 */
|
|
182
|
+
created_at: z.number().meta({ description: "作成日時(UNIX 秒)", example: 1700000000 }),
|
|
183
|
+
/** テンプレートか(0/1) @example 0 */
|
|
184
|
+
is_template: z.number().meta({ description: "テンプレートか(0/1)", example: 0 }),
|
|
185
|
+
/** 公開中か @example true */
|
|
186
|
+
is_public: z.boolean().meta({ description: "公開中か", example: true }),
|
|
187
|
+
/** 既読か @example false */
|
|
188
|
+
is_read: z.boolean().meta({ description: "既読か", example: false }),
|
|
189
|
+
/** ピン留めされているか @example false */
|
|
190
|
+
is_pinned: z.boolean().meta({ description: "ピン留めされているか", example: false }),
|
|
191
|
+
/** 「いいね」済みか @example false */
|
|
192
|
+
is_reacted_good: z.boolean().meta({ description: "「いいね」済みか", example: false }),
|
|
193
|
+
/** 「いいね」数 @example 0 */
|
|
194
|
+
good_count: z.number().meta({ description: "「いいね」数", example: 0 }),
|
|
195
|
+
/** カテゴリ */
|
|
196
|
+
category: AlboInformationCategorySchema,
|
|
197
|
+
/** 添付ファイル(無ければ null) @example null */
|
|
198
|
+
files: z.array(AlboInformationFileSchema).nullable().meta({ description: "添付ファイル", example: null }),
|
|
199
|
+
/** 個人向け添付ファイル(無ければ null) @example null */
|
|
200
|
+
personal_files: z.array(AlboInformationFileSchema).nullable().meta({ description: "個人向け添付ファイル", example: null }),
|
|
201
|
+
/** 本文中の画像(無ければ null) @example null */
|
|
202
|
+
images: z.array(AlboInformationFileSchema).nullable().meta({ description: "本文中の画像", example: null }),
|
|
203
|
+
});
|
|
204
|
+
/** お知らせ一覧取得 API のレスポンス全体 */
|
|
205
|
+
export const AlboInformationSchema = alboEnvelope(z.object({
|
|
206
|
+
...paginationShape,
|
|
207
|
+
/** お知らせ配列 */
|
|
208
|
+
items: z.array(AlboInformationItemSchema).meta({ description: "お知らせ配列" }),
|
|
209
|
+
}));
|
|
210
|
+
// --- 個人情報(PII を含む。auth/check-logged-in も同型) ---------------------
|
|
211
|
+
/** ユーザーに割り当てられた認証プロファイル */
|
|
212
|
+
export const AlboPersonalAuthProfileSchema = z.object({
|
|
213
|
+
/** プロファイル UUID @example "00000000-0000-0000-0000-000000000000" */
|
|
214
|
+
uuid: z.string().meta({ description: "プロファイル UUID", example: "00000000-0000-0000-0000-000000000000" }),
|
|
215
|
+
/** プロファイル名 @example "学生" */
|
|
216
|
+
name: z.string().meta({ description: "プロファイル名", example: "学生" }),
|
|
217
|
+
/** 作成日時(UNIX 秒) @example 1700000000 */
|
|
218
|
+
created_at: z.number().meta({ description: "作成日時(UNIX 秒)", example: 1700000000 }),
|
|
219
|
+
/** 更新日時(UNIX 秒。無ければ null) @example null */
|
|
220
|
+
updated_at: z.number().nullable().meta({ description: "更新日時(UNIX 秒)", example: null }),
|
|
221
|
+
});
|
|
222
|
+
/** ユーザーが所属するグループ */
|
|
223
|
+
export const AlboPersonalGroupSchema = z.object({
|
|
224
|
+
/** グループのインデックス @example "1" */
|
|
225
|
+
group_index: z.string().meta({ description: "グループのインデックス", example: "1" }),
|
|
226
|
+
/** 次のグループインデックス @example "2" */
|
|
227
|
+
next_group_index: z.string().meta({ description: "次のグループインデックス", example: "2" }),
|
|
228
|
+
/** 元のグループインデックス @example "1" */
|
|
229
|
+
orig_group_index: z.string().meta({ description: "元のグループインデックス", example: "1" }),
|
|
230
|
+
/** グループ UUID @example "99999999-8888-7777-6666-555555555555" */
|
|
231
|
+
uuid: z.string().meta({ description: "グループ UUID", example: "99999999-8888-7777-6666-555555555555" }),
|
|
232
|
+
/** グループ名 @example "工学部" */
|
|
233
|
+
name: z.string().meta({ description: "グループ名", example: "工学部" }),
|
|
234
|
+
/** グループ名(英語。無ければ null) @example null */
|
|
235
|
+
name_en: z.string().nullable().meta({ description: "グループ名(英語)", example: null }),
|
|
236
|
+
/** 権限グループか @example false */
|
|
237
|
+
is_authority: z.boolean().meta({ description: "権限グループか", example: false }),
|
|
238
|
+
/** 表示順 @example 0 */
|
|
239
|
+
order: z.number().meta({ description: "表示順", example: 0 }),
|
|
240
|
+
/** 有効フラグ(0/1) @example 1 */
|
|
241
|
+
is_active: z.number().meta({ description: "有効フラグ(0/1)", example: 1 }),
|
|
242
|
+
/** サインアップ画面に表示するか(0/1) @example 0 */
|
|
243
|
+
is_shown_in_signup: z.number().meta({ description: "サインアップ画面に表示するか(0/1)", example: 0 }),
|
|
244
|
+
/** 作成日時(UNIX 秒) @example 1700000000 */
|
|
245
|
+
created_at: z.number().meta({ description: "作成日時(UNIX 秒)", example: 1700000000 }),
|
|
246
|
+
/** 更新日時(UNIX 秒) @example 1700000000 */
|
|
247
|
+
updated_at: z.number().meta({ description: "更新日時(UNIX 秒)", example: 1700000000 }),
|
|
248
|
+
/** グループの正式名 @example "工学部 情報工学科" */
|
|
249
|
+
full_name: z.string().meta({ description: "グループの正式名", example: "工学部 情報工学科" }),
|
|
250
|
+
/** 表示名 @example "情報工学科" */
|
|
251
|
+
display_name: z.string().meta({ description: "表示名", example: "情報工学科" }),
|
|
252
|
+
/** 表示名(英語) @example "Dept. of Information Engineering" */
|
|
253
|
+
display_name_en: z.string().meta({ description: "表示名(英語)", example: "Dept. of Information Engineering" }),
|
|
254
|
+
});
|
|
255
|
+
/** ログインユーザーの個人情報 */
|
|
256
|
+
export const AlboPersonalUserSchema = z.object({
|
|
257
|
+
/** ユーザー UUID @example "aaaaaaaa-0000-0000-0000-000000000000" */
|
|
258
|
+
uuid: z.string().meta({ description: "ユーザー UUID", example: "aaaaaaaa-0000-0000-0000-000000000000" }),
|
|
259
|
+
/** 個人 ID(学籍番号など) @example "T000000" */
|
|
260
|
+
personal_id: z.string().meta({ description: "個人 ID(学籍番号など)", example: "T000000" }),
|
|
261
|
+
/** 氏名 @example "田中太郎" */
|
|
262
|
+
name: z.string().meta({ description: "氏名", example: "田中太郎" }),
|
|
263
|
+
/** 氏名(カナ) @example "タナカタロウ" */
|
|
264
|
+
name_kana: z.string().meta({ description: "氏名(カナ)", example: "タナカタロウ" }),
|
|
265
|
+
/** 氏名(アルファベット) @example "TANAKA TARO" */
|
|
266
|
+
name_alphabet: z.string().meta({ description: "氏名(アルファベット)", example: "TANAKA TARO" }),
|
|
267
|
+
/** メールアドレス @example "t000000@m.chukyo-u.ac.jp" */
|
|
268
|
+
email: z.string().meta({ description: "メールアドレス", example: "t000000@m.chukyo-u.ac.jp" }),
|
|
269
|
+
/** ロケール @example "ja" */
|
|
270
|
+
locale: z.string().meta({ description: "ロケール", example: "ja" }),
|
|
271
|
+
/** 任意項目 1(無ければ null) @example null */
|
|
272
|
+
option_1: z.string().nullable().meta({ description: "任意項目 1", example: null }),
|
|
273
|
+
/** 任意項目 2(無ければ null) @example null */
|
|
274
|
+
option_2: z.string().nullable().meta({ description: "任意項目 2", example: null }),
|
|
275
|
+
/** 任意項目 3(無ければ null) @example null */
|
|
276
|
+
option_3: z.string().nullable().meta({ description: "任意項目 3", example: null }),
|
|
277
|
+
/** 任意項目 4(無ければ null) @example null */
|
|
278
|
+
option_4: z.string().nullable().meta({ description: "任意項目 4", example: null }),
|
|
279
|
+
/** 任意項目 5(無ければ null) @example null */
|
|
280
|
+
option_5: z.string().nullable().meta({ description: "任意項目 5", example: null }),
|
|
281
|
+
/** 任意項目 6(無ければ null) @example null */
|
|
282
|
+
option_6: z.string().nullable().meta({ description: "任意項目 6", example: null }),
|
|
283
|
+
/** 任意項目 7(無ければ null) @example null */
|
|
284
|
+
option_7: z.string().nullable().meta({ description: "任意項目 7", example: null }),
|
|
285
|
+
/** 任意項目 8(無ければ null) @example null */
|
|
286
|
+
option_8: z.string().nullable().meta({ description: "任意項目 8", example: null }),
|
|
287
|
+
/** 任意項目 9(無ければ null) @example null */
|
|
288
|
+
option_9: z.string().nullable().meta({ description: "任意項目 9", example: null }),
|
|
289
|
+
/** 任意項目 10(無ければ null) @example null */
|
|
290
|
+
option_10: z.string().nullable().meta({ description: "任意項目 10", example: null }),
|
|
291
|
+
/** 承認状態(無ければ null) @example null */
|
|
292
|
+
approval_status: z.string().nullable().meta({ description: "承認状態", example: null }),
|
|
293
|
+
/** ユーザーが有効か @example true */
|
|
294
|
+
is_user_enabled: z.boolean().meta({ description: "ユーザーが有効か", example: true }),
|
|
295
|
+
/** ログインが有効か @example true */
|
|
296
|
+
is_login_enabled: z.boolean().meta({ description: "ログインが有効か", example: true }),
|
|
297
|
+
/** ゲストか @example false */
|
|
298
|
+
is_guest: z.boolean().meta({ description: "ゲストか", example: false }),
|
|
299
|
+
/** 利用開始日時(UNIX 秒) @example 1680000000 */
|
|
300
|
+
start_at: z.number().meta({ description: "利用開始日時(UNIX 秒)", example: 1680000000 }),
|
|
301
|
+
/** 利用終了日時(UNIX 秒) @example 1900000000 */
|
|
302
|
+
end_at: z.number().meta({ description: "利用終了日時(UNIX 秒)", example: 1900000000 }),
|
|
303
|
+
/** メモ(無ければ null) @example null */
|
|
304
|
+
memo: z.string().nullable().meta({ description: "メモ", example: null }),
|
|
305
|
+
/** 管理者メモ(無ければ null) @example null */
|
|
306
|
+
admin_memo: z.string().nullable().meta({ description: "管理者メモ", example: null }),
|
|
307
|
+
/** CSV 削除対象外フラグ @example false */
|
|
308
|
+
is_not_delete_csv: z.boolean().meta({ description: "CSV 削除対象外フラグ", example: false }),
|
|
309
|
+
/** 作成日時(UNIX 秒) @example 1680000000 */
|
|
310
|
+
created_at: z.number().meta({ description: "作成日時(UNIX 秒)", example: 1680000000 }),
|
|
311
|
+
/** 更新日時(UNIX 秒) @example 1700000000 */
|
|
312
|
+
updated_at: z.number().meta({ description: "更新日時(UNIX 秒)", example: 1700000000 }),
|
|
313
|
+
/** ログイン用ユーザー ID @example "t000000" */
|
|
314
|
+
user_id: z.string().meta({ description: "ログイン用ユーザー ID", example: "t000000" }),
|
|
315
|
+
/** 認証プロファイル */
|
|
316
|
+
auth_profiles: AlboPersonalAuthProfileSchema,
|
|
317
|
+
/** 所属グループ一覧 */
|
|
318
|
+
groups: z.array(AlboPersonalGroupSchema).meta({ description: "所属グループ一覧" }),
|
|
319
|
+
/** 必須アンケートへ回答済みか @example true */
|
|
320
|
+
has_answer_force_questionnaire: z.boolean().meta({ description: "必須アンケートへ回答済みか", example: true }),
|
|
321
|
+
/** 必須アンケートがあるか @example false */
|
|
322
|
+
has_force_questionnaire: z.boolean().meta({ description: "必須アンケートがあるか", example: false }),
|
|
323
|
+
/** サブメールアドレス一覧 @example [] */
|
|
324
|
+
sub_email_addresses: z.array(z.string()).meta({ description: "サブメールアドレス一覧", example: [] }),
|
|
325
|
+
/** 表示用グループ名一覧 @example ["工学部 情報工学科"] */
|
|
326
|
+
display_group_names: z.array(z.string()).meta({ description: "表示用グループ名一覧", example: ["工学部 情報工学科"] }),
|
|
327
|
+
/** 表示用グループ名一覧(英語) @example [] */
|
|
328
|
+
display_group_names_en: z.array(z.string()).meta({ description: "表示用グループ名一覧(英語)", example: [] }),
|
|
329
|
+
/** プロフィール画像(無ければ null) @example null */
|
|
330
|
+
portrait: z.string().nullable().meta({ description: "プロフィール画像", example: null }),
|
|
331
|
+
/** 権限区分 @example "student" */
|
|
332
|
+
permission: z.string().meta({ description: "権限区分", example: "student" }),
|
|
333
|
+
/** 権限ユニット一覧 @example [] */
|
|
334
|
+
permission_unit: z.array(z.unknown()).meta({ description: "権限ユニット一覧", example: [] }),
|
|
335
|
+
/** ローカル認証を持つか @example false */
|
|
336
|
+
has_local_auth: z.boolean().meta({ description: "ローカル認証を持つか", example: false }),
|
|
337
|
+
/** 関連グループ(未使用時 null) @example null */
|
|
338
|
+
affiliated_groups: z.unknown().nullable().meta({ description: "関連グループ", example: null }),
|
|
339
|
+
});
|
|
340
|
+
/** ログイン後の個人情報取得 API のレスポンス全体(user に個人情報が入る) */
|
|
341
|
+
export const AlboPersonalSchema = alboEnvelope(z.object({
|
|
342
|
+
/** ログイン結果 @example "success" */
|
|
343
|
+
login: z.string().meta({ description: "ログイン結果", example: "success" }),
|
|
344
|
+
/** メッセージ @example "" */
|
|
345
|
+
message: z.string().meta({ description: "メッセージ", example: "" }),
|
|
346
|
+
/** ログインメッセージ(無ければ null) @example null */
|
|
347
|
+
login_message: z.string().nullable().meta({ description: "ログインメッセージ", example: null }),
|
|
348
|
+
}), AlboPersonalUserSchema);
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** カレンダーソース(学年暦・Google カレンダー連携など)1 件 */
|
|
3
|
+
export declare const AlboCalendarSourceItemSchema: z.ZodObject<{
|
|
4
|
+
uuid: z.ZodString;
|
|
5
|
+
title: z.ZodString;
|
|
6
|
+
title_en: z.ZodNullable<z.ZodString>;
|
|
7
|
+
url: z.ZodString;
|
|
8
|
+
is_living: z.ZodBoolean;
|
|
9
|
+
is_deleted: z.ZodBoolean;
|
|
10
|
+
created_at: z.ZodNumber;
|
|
11
|
+
updated_at: z.ZodNumber;
|
|
12
|
+
deleted_at: z.ZodNullable<z.ZodNumber>;
|
|
13
|
+
created_by: z.ZodNullable<z.ZodString>;
|
|
14
|
+
updated_by: z.ZodNullable<z.ZodString>;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
export type AlboCalendarSourceItemDTO = z.infer<typeof AlboCalendarSourceItemSchema>;
|
|
17
|
+
/** カレンダーソース一覧取得 API のレスポンス全体 */
|
|
18
|
+
export declare const AlboCalendarSourceSchema: z.ZodObject<{
|
|
19
|
+
is_successful: z.ZodBoolean;
|
|
20
|
+
code: z.ZodNumber;
|
|
21
|
+
api_version: z.ZodNumber;
|
|
22
|
+
gmt: z.ZodNumber;
|
|
23
|
+
user: z.ZodNullable<z.ZodUnknown>;
|
|
24
|
+
result: z.ZodObject<{
|
|
25
|
+
items: z.ZodArray<z.ZodObject<{
|
|
26
|
+
uuid: z.ZodString;
|
|
27
|
+
title: z.ZodString;
|
|
28
|
+
title_en: z.ZodNullable<z.ZodString>;
|
|
29
|
+
url: z.ZodString;
|
|
30
|
+
is_living: z.ZodBoolean;
|
|
31
|
+
is_deleted: z.ZodBoolean;
|
|
32
|
+
created_at: z.ZodNumber;
|
|
33
|
+
updated_at: z.ZodNumber;
|
|
34
|
+
deleted_at: z.ZodNullable<z.ZodNumber>;
|
|
35
|
+
created_by: z.ZodNullable<z.ZodString>;
|
|
36
|
+
updated_by: z.ZodNullable<z.ZodString>;
|
|
37
|
+
}, z.core.$strip>>;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
}, z.core.$strip>;
|
|
40
|
+
export type AlboCalendarSourceDTO = z.infer<typeof AlboCalendarSourceSchema>;
|
|
41
|
+
/**
|
|
42
|
+
* Outlook 連携イベント取得 API のレスポンス全体。
|
|
43
|
+
* Microsoft アカウント未連携の場合は `is_successful: false` かつ
|
|
44
|
+
* `result: { message: "No token." }` が返る。連携済みの場合はイベント配列が返る想定。
|
|
45
|
+
*/
|
|
46
|
+
export declare const AlboCalendarOutlookEventSchema: z.ZodObject<{
|
|
47
|
+
is_successful: z.ZodBoolean;
|
|
48
|
+
code: z.ZodNumber;
|
|
49
|
+
api_version: z.ZodNumber;
|
|
50
|
+
gmt: z.ZodNumber;
|
|
51
|
+
user: z.ZodNullable<z.ZodUnknown>;
|
|
52
|
+
result: z.ZodObject<{
|
|
53
|
+
message: z.ZodOptional<z.ZodString>;
|
|
54
|
+
items: z.ZodOptional<z.ZodArray<z.ZodUnknown>>;
|
|
55
|
+
}, z.core.$strip>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
export type AlboCalendarOutlookEventDTO = z.infer<typeof AlboCalendarOutlookEventSchema>;
|
|
58
|
+
//# sourceMappingURL=alboCalendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alboCalendar.d.ts","sourceRoot":"","sources":["../../../../src/albo/types/alboCalendar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,wCAAwC;AACxC,eAAO,MAAM,4BAA4B;;;;;;;;;;;;iBAuBvC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAErF,gCAAgC;AAChC,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;iBAKpC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE7E;;;;GAIG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;iBAO1C,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { alboEnvelope } from "./alboCommon";
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// カレンダー(calendar)系のうち、イベント一覧(AlboCalendarSchema in ./albo)以外。
|
|
5
|
+
// - GET /api/calendar-source/ … 購読しているカレンダーソースの一覧
|
|
6
|
+
// - GET /api/calendar/outlook-event/{n} … Outlook 連携イベント(未連携時はエラー)
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
/** カレンダーソース(学年暦・Google カレンダー連携など)1 件 */
|
|
9
|
+
export const AlboCalendarSourceItemSchema = z.object({
|
|
10
|
+
/** カレンダーソース UUID @example "ac304d66-b0a8-11f0-afed-06347f3ce845" */
|
|
11
|
+
uuid: z.string().meta({ description: "カレンダーソース UUID", example: "ac304d66-b0a8-11f0-afed-06347f3ce845" }),
|
|
12
|
+
/** 名称 @example "学年暦(学部)" */
|
|
13
|
+
title: z.string().meta({ description: "名称", example: "学年暦(学部)" }),
|
|
14
|
+
/** 名称(英語。無ければ null) @example null */
|
|
15
|
+
title_en: z.string().nullable().meta({ description: "名称(英語)", example: null }),
|
|
16
|
+
/** 購読元 URL(iCal / Google Calendar など) @example "https://calendar.google.com/calendar/ical/example/basic.ics" */
|
|
17
|
+
url: z.string().meta({ description: "購読元 URL(iCal / Google Calendar など)", example: "https://calendar.google.com/calendar/ical/example/basic.ics" }),
|
|
18
|
+
/** 有効なソースか @example true */
|
|
19
|
+
is_living: z.boolean().meta({ description: "有効なソースか", example: true }),
|
|
20
|
+
/** 削除済みか @example false */
|
|
21
|
+
is_deleted: z.boolean().meta({ description: "削除済みか", example: false }),
|
|
22
|
+
/** 作成日時(UNIX 秒) @example 1700000000 */
|
|
23
|
+
created_at: z.number().meta({ description: "作成日時(UNIX 秒)", example: 1700000000 }),
|
|
24
|
+
/** 更新日時(UNIX 秒) @example 1700000000 */
|
|
25
|
+
updated_at: z.number().meta({ description: "更新日時(UNIX 秒)", example: 1700000000 }),
|
|
26
|
+
/** 削除日時(UNIX 秒。未削除なら null) @example null */
|
|
27
|
+
deleted_at: z.number().nullable().meta({ description: "削除日時(UNIX 秒)", example: null }),
|
|
28
|
+
/** 作成者(無ければ null) @example "system" */
|
|
29
|
+
created_by: z.string().nullable().meta({ description: "作成者", example: "system" }),
|
|
30
|
+
/** 更新者(無ければ null) @example null */
|
|
31
|
+
updated_by: z.string().nullable().meta({ description: "更新者", example: null }),
|
|
32
|
+
});
|
|
33
|
+
/** カレンダーソース一覧取得 API のレスポンス全体 */
|
|
34
|
+
export const AlboCalendarSourceSchema = alboEnvelope(z.object({
|
|
35
|
+
/** カレンダーソースの配列 */
|
|
36
|
+
items: z.array(AlboCalendarSourceItemSchema).meta({ description: "カレンダーソースの配列" }),
|
|
37
|
+
}));
|
|
38
|
+
/**
|
|
39
|
+
* Outlook 連携イベント取得 API のレスポンス全体。
|
|
40
|
+
* Microsoft アカウント未連携の場合は `is_successful: false` かつ
|
|
41
|
+
* `result: { message: "No token." }` が返る。連携済みの場合はイベント配列が返る想定。
|
|
42
|
+
*/
|
|
43
|
+
export const AlboCalendarOutlookEventSchema = alboEnvelope(z.object({
|
|
44
|
+
/** エラー等のメッセージ(例: "No token.") @example "No token." */
|
|
45
|
+
message: z.string().optional().meta({ description: "エラー等のメッセージ", example: "No token." }),
|
|
46
|
+
/** イベント配列(連携済みの場合) @example [] */
|
|
47
|
+
items: z.array(z.unknown()).optional().meta({ description: "イベント配列(連携済みの場合)", example: [] }),
|
|
48
|
+
}));
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* albo(中京大学ポータル)API 共通の部品。
|
|
4
|
+
*
|
|
5
|
+
* すべての albo API は「封筒(envelope)」で包まれて返る:
|
|
6
|
+
* { is_successful, code, api_version, gmt, user, result }
|
|
7
|
+
* エンドポイントごとに異なるのは `result` の中身だけなので、`alboEnvelope()` に
|
|
8
|
+
* result のスキーマを渡して各 API のスキーマを組み立てる。
|
|
9
|
+
* 値は API が返すキー・型のまま通す(数値の日時は基本 UNIX 秒)。
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* 全 albo API 共通のレスポンス封筒を組み立てるヘルパー。
|
|
13
|
+
* @param resultSchema `result` の中身
|
|
14
|
+
* @param userSchema `user` の型(既定は null。auth/check-logged-in や personal では個人情報が入る)
|
|
15
|
+
*/
|
|
16
|
+
export declare const alboEnvelope: <R extends z.ZodTypeAny, U extends z.ZodTypeAny = z.ZodNullable<z.ZodUnknown>>(resultSchema: R, userSchema?: U) => z.ZodObject<{
|
|
17
|
+
is_successful: z.ZodBoolean;
|
|
18
|
+
code: z.ZodNumber;
|
|
19
|
+
api_version: z.ZodNumber;
|
|
20
|
+
gmt: z.ZodNumber;
|
|
21
|
+
user: U;
|
|
22
|
+
result: R;
|
|
23
|
+
}, z.core.$strip>;
|
|
24
|
+
/**
|
|
25
|
+
* ページング系レスポンスに共通で含まれるフィールド群。
|
|
26
|
+
* `z.object({ ...paginationShape, items: ... })` のように展開して使う。
|
|
27
|
+
*/
|
|
28
|
+
export declare const paginationShape: {
|
|
29
|
+
/** 総ページ数 @example 3 */
|
|
30
|
+
readonly page_total: z.ZodNumber;
|
|
31
|
+
/** 1 ページあたりの件数 @example 20 */
|
|
32
|
+
readonly page_size: z.ZodNumber;
|
|
33
|
+
/** 総件数 @example 57 */
|
|
34
|
+
readonly item_count: z.ZodNumber;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* ボタン操作系 API(既読化・ピン留め・いいね等)が返す汎用の結果。
|
|
38
|
+
* 例: set-read-all → `{ message: "87件のお知らせを既読にしました。", count: 87 }`
|
|
39
|
+
*/
|
|
40
|
+
export declare const AlboActionResultSchema: z.ZodObject<{
|
|
41
|
+
is_successful: z.ZodBoolean;
|
|
42
|
+
code: z.ZodNumber;
|
|
43
|
+
api_version: z.ZodNumber;
|
|
44
|
+
gmt: z.ZodNumber;
|
|
45
|
+
user: z.ZodNullable<z.ZodUnknown>;
|
|
46
|
+
result: z.ZodObject<{
|
|
47
|
+
message: z.ZodString;
|
|
48
|
+
count: z.ZodOptional<z.ZodNumber>;
|
|
49
|
+
}, z.core.$strip>;
|
|
50
|
+
}, z.core.$strip>;
|
|
51
|
+
export type AlboActionResultDTO = z.infer<typeof AlboActionResultSchema>;
|
|
52
|
+
//# sourceMappingURL=alboCommon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alboCommon.d.ts","sourceRoot":"","sources":["../../../../src/albo/types/alboCommon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,EACrG,cAAc,CAAC,EACf,aAAa,CAAC;;;;;UAYsC,CAAC;;iBAGnD,CAAC;AAEP;;;GAGG;AACH,eAAO,MAAM,eAAe;IACxB,uBAAuB;;IAEvB,8BAA8B;;IAE9B,sBAAsB;;CAEhB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;iBAOlC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* albo(中京大学ポータル)API 共通の部品。
|
|
4
|
+
*
|
|
5
|
+
* すべての albo API は「封筒(envelope)」で包まれて返る:
|
|
6
|
+
* { is_successful, code, api_version, gmt, user, result }
|
|
7
|
+
* エンドポイントごとに異なるのは `result` の中身だけなので、`alboEnvelope()` に
|
|
8
|
+
* result のスキーマを渡して各 API のスキーマを組み立てる。
|
|
9
|
+
* 値は API が返すキー・型のまま通す(数値の日時は基本 UNIX 秒)。
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* 全 albo API 共通のレスポンス封筒を組み立てるヘルパー。
|
|
13
|
+
* @param resultSchema `result` の中身
|
|
14
|
+
* @param userSchema `user` の型(既定は null。auth/check-logged-in や personal では個人情報が入る)
|
|
15
|
+
*/
|
|
16
|
+
export const alboEnvelope = (resultSchema, userSchema) => z.object({
|
|
17
|
+
/** 処理成功フラグ @example true */
|
|
18
|
+
is_successful: z.boolean().meta({ description: "処理成功フラグ", example: true }),
|
|
19
|
+
/** ステータスコード(HTTP 相当) @example 200 */
|
|
20
|
+
code: z.number().meta({ description: "ステータスコード(HTTP 相当)", example: 200 }),
|
|
21
|
+
/** API バージョン @example 2 */
|
|
22
|
+
api_version: z.number().meta({ description: "API バージョン", example: 2 }),
|
|
23
|
+
/** レスポンス生成時刻(UNIX 秒) @example 1783445975 */
|
|
24
|
+
gmt: z.number().meta({ description: "レスポンス生成時刻(UNIX 秒)", example: 1783445975 }),
|
|
25
|
+
/** ログインユーザー情報。多くのエンドポイントでは null */
|
|
26
|
+
user: (userSchema ?? z.unknown().nullable()),
|
|
27
|
+
/** エンドポイント固有の本体 */
|
|
28
|
+
result: resultSchema,
|
|
29
|
+
});
|
|
30
|
+
/**
|
|
31
|
+
* ページング系レスポンスに共通で含まれるフィールド群。
|
|
32
|
+
* `z.object({ ...paginationShape, items: ... })` のように展開して使う。
|
|
33
|
+
*/
|
|
34
|
+
export const paginationShape = {
|
|
35
|
+
/** 総ページ数 @example 3 */
|
|
36
|
+
page_total: z.number().meta({ description: "総ページ数", example: 3 }),
|
|
37
|
+
/** 1 ページあたりの件数 @example 20 */
|
|
38
|
+
page_size: z.number().meta({ description: "1 ページあたりの件数", example: 20 }),
|
|
39
|
+
/** 総件数 @example 57 */
|
|
40
|
+
item_count: z.number().meta({ description: "総件数", example: 57 }),
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* ボタン操作系 API(既読化・ピン留め・いいね等)が返す汎用の結果。
|
|
44
|
+
* 例: set-read-all → `{ message: "87件のお知らせを既読にしました。", count: 87 }`
|
|
45
|
+
*/
|
|
46
|
+
export const AlboActionResultSchema = alboEnvelope(z.object({
|
|
47
|
+
/** ユーザー向けの結果メッセージ(日本語) @example "1件のお知らせを既読にしました。" */
|
|
48
|
+
message: z.string().meta({ description: "結果メッセージ(日本語)", example: "1件のお知らせを既読にしました。" }),
|
|
49
|
+
/** 操作対象の件数(件数を伴わない操作では省略) @example 1 */
|
|
50
|
+
count: z.number().optional().meta({ description: "操作対象の件数", example: 1 }),
|
|
51
|
+
}));
|