Settings Center
diff --git a/src/service/wk.ts b/src/service/wk.ts
index 9f9693d..e4b0fa6 100644
--- a/src/service/wk.ts
+++ b/src/service/wk.ts
@@ -24,7 +24,7 @@ export type LoginReq = {
};
export type LoginData = {
- courses: CourseType[];
+ courses?: CourseType[];
session_id: string;
user: userInfoType;
};
@@ -103,12 +103,32 @@ export type HostRes = ApiResponse<{
list: HostItem[];
}>;
+export type VersionData = {
+ BuildAt: string;
+ GitAuthor: string;
+ GitCommit: string;
+ GitEmail: string;
+ Version: string;
+};
+
+export type VersionRes = ApiResponse;
+
export type RecordReq = {
course_id: string;
page: number;
record_type?: RecordType;
};
+export type CourseReq = {
+ status: CourseKind;
+};
+
+export type CourseData = {
+ courses: CourseType[];
+};
+
+export type CourseRes = ApiResponse;
+
export type StudyReq = {
node_id: string;
study_id: string;
@@ -131,11 +151,13 @@ export type StudyRunnerPayload = {
intervalSeconds: number;
items: StudyRunnerItem[];
isRunningStudy: Accessor;
+ setIsRunningStudy: () => void;
client: WkClient;
onLog?: (message: string, accoundID: string) => void;
};
export type WkClient = {
+ courseApi: (payload: CourseReq) => Promise;
recordApi: (payload: RecordReq) => Promise;
studyApi: (payload: StudyReq) => Promise;
logoutApi: () => Promise;
@@ -147,6 +169,9 @@ export const loginApi = async (payload: LoginReq) => {
};
const createWkClientFromHttp = (client: HttpClient): WkClient => ({
+ courseApi(payload) {
+ return client.post("/api/v2/course", payload);
+ },
recordApi(payload) {
return client.post("/api/v2/record", payload);
},
@@ -189,6 +214,12 @@ export const runStudyQueue = async (_payload: StudyRunnerPayload) => {
study_time: String(currentTime),
status: count === 0 ? 1 : currentTime >= total ? 3 : 2,
});
+ if (!resp.data.state) {
+ _payload.onLog?.(`⛔ 自动停止: ${resp.data.msg}`, _payload.accountId);
+ _payload.setIsRunningStudy();
+ return;
+ }
+
study_id = resp.data.studyId;
if (currentTime === total) break;
@@ -208,3 +239,7 @@ export const runStudyQueue = async (_payload: StudyRunnerPayload) => {
export const hostApi = async () => {
return await http.get("/api/v1/host");
};
+
+export const versionApi = async () => {
+ return await http.get("/api/version");
+};
diff --git a/src/store/account.ts b/src/store/account.ts
index 47aea4c..d00bdb6 100644
--- a/src/store/account.ts
+++ b/src/store/account.ts
@@ -36,25 +36,32 @@ export type AccountItem = {
courses: CourseType[];
};
+export type RecordCacheMap = Record;
+
type AccountState = {
accounts: AccountItem[];
selectedAccountId: string;
expandedAccountId: string;
selectedCourseId: number | null;
+ courseKind: CourseKind;
recordType: RecordType;
records: RecordItem[];
+ recordCacheMap: RecordCacheMap;
studyLogsMap: Record;
runningStudyMap: Record;
setSelectedAccountId: (accountId: string) => void;
setExpandedAccountId: (accountId: string) => void;
setSelectedCourseId: (courseId: number | null) => void;
+ setCourseKind: (courseKind: CourseKind) => void;
setRecordType: (recordType: RecordType) => void;
setRecords: (records: RecordItem[]) => void;
+ setRecordCache: (cacheKey: string, records: RecordItem[]) => void;
setAccountRunningStudy: (accountId: string, value: boolean) => void;
appendStudyLog: (accountId: string, message: string) => void;
clearStudyLogs: (accountId: string) => void;
clearAllStudyLogs: () => void;
upsertAccount: (account: AccountItem) => void;
+ setAccountCourses: (accountId: string, courses: CourseType[]) => void;
removeAccount: (accountId: string) => void;
};
@@ -65,8 +72,10 @@ export const accountStore = createStore()(
selectedAccountId: "",
expandedAccountId: "",
selectedCourseId: null,
+ courseKind: "run",
recordType: "",
records: [],
+ recordCacheMap: {},
studyLogsMap: {},
runningStudyMap: {},
setSelectedAccountId: (accountId) =>
@@ -74,8 +83,16 @@ export const accountStore = createStore()(
setExpandedAccountId: (accountId) =>
set({ expandedAccountId: accountId }),
setSelectedCourseId: (courseId) => set({ selectedCourseId: courseId }),
+ setCourseKind: (courseKind) => set({ courseKind }),
setRecordType: (recordType) => set({ recordType }),
setRecords: (records) => set({ records }),
+ setRecordCache: (cacheKey, records) =>
+ set((state) => ({
+ recordCacheMap: {
+ ...state.recordCacheMap,
+ [cacheKey]: records,
+ },
+ })),
setAccountRunningStudy: (accountId, value) =>
set((state) => ({
runningStudyMap: {
@@ -113,6 +130,12 @@ export const accountStore = createStore()(
selectedAccountId: account.id,
expandedAccountId: account.id,
})),
+ setAccountCourses: (accountId, courses) =>
+ set((state) => ({
+ accounts: state.accounts.map((item) =>
+ item.id === accountId ? { ...item, courses } : item,
+ ),
+ })),
removeAccount: (accountId) =>
set((state) => {
const nextAccounts = state.accounts.filter(
@@ -133,6 +156,11 @@ export const accountStore = createStore()(
? null
: state.selectedCourseId,
records: state.selectedAccountId === accountId ? [] : state.records,
+ recordCacheMap: Object.fromEntries(
+ Object.entries(state.recordCacheMap).filter(
+ ([key]) => !key.startsWith(`${accountId}::`),
+ ),
+ ),
studyLogsMap: Object.fromEntries(
Object.entries(state.studyLogsMap).filter(
([key]) => key !== accountId,
@@ -154,8 +182,10 @@ export const accountStore = createStore()(
selectedAccountId: state.selectedAccountId,
expandedAccountId: state.expandedAccountId,
selectedCourseId: state.selectedCourseId,
+ courseKind: state.courseKind,
recordType: state.recordType,
records: state.records,
+ recordCacheMap: state.recordCacheMap,
studyLogsMap: state.studyLogsMap,
runningStudyMap: state.runningStudyMap,
}),