captcha添加application外键,创建captcha时附上applicationId
This commit is contained in:
parent
130740db93
commit
c79b7ca63f
|
|
@ -2027,6 +2027,7 @@ export async function sendCaptchaByMobile({ mobile, env, type: captchaType, }, c
|
|||
expired: false,
|
||||
expiresAt: now + duration * 60 * 1000,
|
||||
type: captchaType,
|
||||
applicationId: application?.id,
|
||||
},
|
||||
}, {
|
||||
dontCollect: true,
|
||||
|
|
@ -2158,6 +2159,7 @@ export async function sendCaptchaByEmail({ email, env, type: captchaType, }, con
|
|||
// }
|
||||
code = Array.from({ length: digit }, () => Math.floor(Math.random() * 10)).join('');
|
||||
const id = await generateNewIdAsync();
|
||||
const applicationId = context.getApplication()?.id;
|
||||
await context.operate('captcha', {
|
||||
id: await generateNewIdAsync(),
|
||||
action: 'create',
|
||||
|
|
@ -2171,6 +2173,7 @@ export async function sendCaptchaByEmail({ email, env, type: captchaType, }, con
|
|||
expired: false,
|
||||
expiresAt: now + duration * 60 * 1000,
|
||||
type: captchaType,
|
||||
applicationId,
|
||||
},
|
||||
}, {
|
||||
dontCollect: true,
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import { EntityShape } from 'oak-domain/lib/types/Entity';
|
|||
import { String, Text, Boolean, Datetime } from 'oak-domain/lib/types/DataType';
|
||||
import { ActionDef } from 'oak-domain/lib/types';
|
||||
import { EntityDesc } from 'oak-domain/lib/types/EntityDesc';
|
||||
import { Schema as Application } from './Application';
|
||||
export interface Schema extends EntityShape {
|
||||
origin: 'mobile' | 'email';
|
||||
content: String<32>;
|
||||
|
|
@ -12,6 +13,7 @@ export interface Schema extends EntityShape {
|
|||
expired: Boolean;
|
||||
expiresAt: Datetime;
|
||||
type: 'login' | 'changePassword' | 'confirm';
|
||||
application?: Application;
|
||||
}
|
||||
export type IState = 'unsent' | 'sending' | 'sent' | 'failure';
|
||||
export type IAction = 'send' | 'success' | 'fail';
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ export const entityDesc = {
|
|||
expiresAt: '过期时间',
|
||||
iState: '状态',
|
||||
type: '类型',
|
||||
application: '应用',
|
||||
},
|
||||
action: {
|
||||
send: '发送',
|
||||
|
|
|
|||
|
|
@ -44,6 +44,10 @@ export const desc = {
|
|||
type: "enum",
|
||||
enumeration: ["login", "changePassword", "confirm"]
|
||||
},
|
||||
applicationId: {
|
||||
type: "ref",
|
||||
ref: "application"
|
||||
},
|
||||
iState: {
|
||||
type: "enum",
|
||||
enumeration: ["unsent", "sending", "sent", "failure"]
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import { ForeignKey } from "oak-domain/lib/types/DataType";
|
||||
import { Q_DateValue, Q_BooleanValue, Q_NumberValue, Q_StringValue, Q_EnumValue, NodeId, ExprOp, ExpressionKey } from "oak-domain/lib/types/Demand";
|
||||
import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/Entity";
|
||||
import { Action, ParticularAction, IState } from "./Action";
|
||||
|
|
@ -12,6 +13,7 @@ export type OpSchema = EntityShape & {
|
|||
expired: Boolean;
|
||||
expiresAt: Datetime;
|
||||
type: "login" | "changePassword" | "confirm";
|
||||
applicationId?: ForeignKey<"application"> | null;
|
||||
iState?: IState | null;
|
||||
} & {
|
||||
[A in ExpressionKey]?: any;
|
||||
|
|
@ -31,6 +33,7 @@ export type OpFilter = {
|
|||
expired: Q_BooleanValue;
|
||||
expiresAt: Q_DateValue;
|
||||
type: Q_EnumValue<"login" | "changePassword" | "confirm">;
|
||||
applicationId: Q_StringValue;
|
||||
iState: Q_EnumValue<IState>;
|
||||
} & ExprOp<OpAttr | string>;
|
||||
export type OpProjection = {
|
||||
|
|
@ -49,6 +52,7 @@ export type OpProjection = {
|
|||
expired?: number;
|
||||
expiresAt?: number;
|
||||
type?: number;
|
||||
applicationId?: number;
|
||||
iState?: number;
|
||||
} & Partial<ExprOp<OpAttr | string>>;
|
||||
export type OpSortAttr = Partial<{
|
||||
|
|
@ -64,6 +68,7 @@ export type OpSortAttr = Partial<{
|
|||
expired: number;
|
||||
expiresAt: number;
|
||||
type: number;
|
||||
applicationId: number;
|
||||
iState: number;
|
||||
[k: string]: any;
|
||||
} | ExprOp<OpAttr | string>>;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,8 @@
|
|||
"expired": "是否过期",
|
||||
"expiresAt": "过期时间",
|
||||
"iState": "状态",
|
||||
"type": "类型"
|
||||
"type": "类型",
|
||||
"application": "应用"
|
||||
},
|
||||
"action": {
|
||||
"send": "发送",
|
||||
|
|
|
|||
|
|
@ -1038,6 +1038,7 @@ export type Application = {
|
|||
system: System["Schema"];
|
||||
domain?: Domain["Schema"];
|
||||
applicationPassport$application?: Array<Omit<ApplicationPassport["Schema"], "application">>;
|
||||
captcha$application?: Array<Omit<Captcha["Schema"], "application">>;
|
||||
extraFile$application?: Array<Omit<ExtraFile["Schema"], "application">>;
|
||||
notification$application?: Array<Omit<Notification["Schema"], "application">>;
|
||||
sessionMessage$application?: Array<Omit<SessionMessage["Schema"], "application">>;
|
||||
|
|
@ -1050,6 +1051,7 @@ export type Application = {
|
|||
wechatUser$application?: Array<Omit<WechatUser["Schema"], "application">>;
|
||||
session$entity?: Array<Omit<Session["Schema"], "entity">>;
|
||||
applicationPassport$application$$aggr?: AggregationResult<Omit<ApplicationPassport["Schema"], "application">>;
|
||||
captcha$application$$aggr?: AggregationResult<Omit<Captcha["Schema"], "application">>;
|
||||
extraFile$application$$aggr?: AggregationResult<Omit<ExtraFile["Schema"], "application">>;
|
||||
notification$application$$aggr?: AggregationResult<Omit<Notification["Schema"], "application">>;
|
||||
sessionMessage$application$$aggr?: AggregationResult<Omit<SessionMessage["Schema"], "application">>;
|
||||
|
|
@ -1071,6 +1073,12 @@ export type Application = {
|
|||
applicationPassport$application$$aggr?: DeduceAggregation<Omit<ApplicationPassport["Projection"], "application">, Omit<ApplicationPassport["Filter"], "application">, ApplicationPassport["Sorter"]> & {
|
||||
$entity: "applicationPassport";
|
||||
};
|
||||
captcha$application?: OakSelection<"select", Omit<Captcha["Projection"], "application">, Omit<Captcha["Filter"], "application">, Captcha["Sorter"]> & {
|
||||
$entity: "captcha";
|
||||
};
|
||||
captcha$application$$aggr?: DeduceAggregation<Omit<Captcha["Projection"], "application">, Omit<Captcha["Filter"], "application">, Captcha["Sorter"]> & {
|
||||
$entity: "captcha";
|
||||
};
|
||||
extraFile$application?: OakSelection<"select", Omit<ExtraFile["Projection"], "application">, Omit<ExtraFile["Filter"], "application">, ExtraFile["Sorter"]> & {
|
||||
$entity: "extraFile";
|
||||
};
|
||||
|
|
@ -1142,6 +1150,7 @@ export type Application = {
|
|||
system: MakeFilter<System["FilterUnit"]>;
|
||||
domain: MakeFilter<Domain["FilterUnit"]>;
|
||||
applicationPassport$application: MakeFilter<Omit<ApplicationPassport["FilterUnit"], "application">> & SubQueryPredicateMetadata;
|
||||
captcha$application: MakeFilter<Omit<Captcha["FilterUnit"], "application">> & SubQueryPredicateMetadata;
|
||||
extraFile$application: MakeFilter<Omit<ExtraFile["FilterUnit"], "application">> & SubQueryPredicateMetadata;
|
||||
notification$application: MakeFilter<Omit<Notification["FilterUnit"], "application">> & SubQueryPredicateMetadata;
|
||||
sessionMessage$application: MakeFilter<Omit<SessionMessage["FilterUnit"], "application">> & SubQueryPredicateMetadata;
|
||||
|
|
@ -1170,6 +1179,7 @@ export type Application = {
|
|||
system?: OakOperation<"create", System["CreateOperationData"]> | OakOperation<BaseSystem.OpUpdateAction, System["UpdateOperationData"], System["Filter"]>;
|
||||
domain?: OakOperation<"create", Domain["CreateOperationData"]> | OakOperation<BaseDomain.OpUpdateAction, Domain["UpdateOperationData"], Domain["Filter"]>;
|
||||
applicationPassport$application?: (OakOperation<"create", Omit<ApplicationPassport["CreateOperationData"], "application"> | Omit<ApplicationPassport["CreateOperationData"], "application">[]> | OakOperation<BaseApplicationPassport.OpUpdateAction, Omit<ApplicationPassport["UpdateOperationData"], "application">, ApplicationPassport["Filter"]>)[];
|
||||
captcha$application?: (OakOperation<"create", Omit<Captcha["CreateOperationData"], "application"> | Omit<Captcha["CreateOperationData"], "application">[]> | OakOperation<BaseCaptcha.OpUpdateAction, Omit<Captcha["UpdateOperationData"], "application">, Captcha["Filter"]>)[];
|
||||
extraFile$application?: (OakOperation<"create", Omit<ExtraFile["CreateOperationData"], "application"> | Omit<ExtraFile["CreateOperationData"], "application">[]> | OakOperation<BaseExtraFile.OpUpdateAction, Omit<ExtraFile["UpdateOperationData"], "application">, ExtraFile["Filter"]>)[];
|
||||
notification$application?: (OakOperation<"create", Omit<Notification["CreateOperationData"], "application"> | Omit<Notification["CreateOperationData"], "application">[]> | OakOperation<BaseNotification.OpUpdateAction, Omit<Notification["UpdateOperationData"], "application">, Notification["Filter"]>)[];
|
||||
sessionMessage$application?: (OakOperation<"create", Omit<SessionMessage["CreateOperationData"], "application"> | Omit<SessionMessage["CreateOperationData"], "application">[]> | OakOperation<BaseSessionMessage.OpUpdateAction, Omit<SessionMessage["UpdateOperationData"], "application">, SessionMessage["Filter"]>)[];
|
||||
|
|
@ -1189,6 +1199,7 @@ export type Application = {
|
|||
system?: OakOperation<"create", System["CreateOperationData"]> | OakOperation<BaseSystem.OpUpdateAction, System["UpdateOperationData"], System["Filter"]> | OakOperation<"remove", System["RemoveOperationData"], System["Filter"]>;
|
||||
domain?: OakOperation<"create", Domain["CreateOperationData"]> | OakOperation<BaseDomain.OpUpdateAction, Domain["UpdateOperationData"], Domain["Filter"]> | OakOperation<"remove", Domain["RemoveOperationData"], Domain["Filter"]>;
|
||||
applicationPassport$application?: (OakOperation<"create", Omit<ApplicationPassport["CreateOperationData"], "application"> | Omit<ApplicationPassport["CreateOperationData"], "application">[]> | OakOperation<BaseApplicationPassport.OpUpdateAction, Omit<ApplicationPassport["UpdateOperationData"], "application">, ApplicationPassport["Filter"]> | OakOperation<"remove", ApplicationPassport["RemoveOperationData"], ApplicationPassport["Filter"]>)[];
|
||||
captcha$application?: (OakOperation<"create", Omit<Captcha["CreateOperationData"], "application"> | Omit<Captcha["CreateOperationData"], "application">[]> | OakOperation<BaseCaptcha.OpUpdateAction, Omit<Captcha["UpdateOperationData"], "application">, Captcha["Filter"]> | OakOperation<"remove", Captcha["RemoveOperationData"], Captcha["Filter"]>)[];
|
||||
extraFile$application?: (OakOperation<"create", Omit<ExtraFile["CreateOperationData"], "application"> | Omit<ExtraFile["CreateOperationData"], "application">[]> | OakOperation<BaseExtraFile.OpUpdateAction, Omit<ExtraFile["UpdateOperationData"], "application">, ExtraFile["Filter"]> | OakOperation<"remove", ExtraFile["RemoveOperationData"], ExtraFile["Filter"]>)[];
|
||||
notification$application?: (OakOperation<"create", Omit<Notification["CreateOperationData"], "application"> | Omit<Notification["CreateOperationData"], "application">[]> | OakOperation<BaseNotification.OpUpdateAction, Omit<Notification["UpdateOperationData"], "application">, Notification["Filter"]> | OakOperation<"remove", Notification["RemoveOperationData"], Notification["Filter"]>)[];
|
||||
sessionMessage$application?: (OakOperation<"create", Omit<SessionMessage["CreateOperationData"], "application"> | Omit<SessionMessage["CreateOperationData"], "application">[]> | OakOperation<BaseSessionMessage.OpUpdateAction, Omit<SessionMessage["UpdateOperationData"], "application">, SessionMessage["Filter"]> | OakOperation<"remove", SessionMessage["RemoveOperationData"], SessionMessage["Filter"]>)[];
|
||||
|
|
@ -1447,11 +1458,19 @@ export type ArticleMenu = {
|
|||
export type Captcha = {
|
||||
OpSchema: BaseCaptcha.OpSchema;
|
||||
Action: BaseCaptcha.OpAction;
|
||||
Schema: BaseCaptcha.OpSchema & {};
|
||||
Projection: BaseCaptcha.OpProjection & {};
|
||||
FilterUnit: BaseCaptcha.OpFilter & {};
|
||||
Schema: BaseCaptcha.OpSchema & {
|
||||
application?: Application["Schema"];
|
||||
};
|
||||
Projection: BaseCaptcha.OpProjection & {
|
||||
application?: Application["Projection"];
|
||||
};
|
||||
FilterUnit: BaseCaptcha.OpFilter & {
|
||||
application: MakeFilter<Application["FilterUnit"]>;
|
||||
};
|
||||
Filter: MakeFilter<Captcha["FilterUnit"]>;
|
||||
SortAttr: Partial<BaseCaptcha.OpSortAttr | {}>;
|
||||
SortAttr: Partial<BaseCaptcha.OpSortAttr | {
|
||||
application: Application["SortAttr"];
|
||||
}>;
|
||||
SortNode: {
|
||||
$attr: Captcha["SortAttr"];
|
||||
$direction?: "asc" | "desc";
|
||||
|
|
@ -1459,11 +1478,15 @@ export type Captcha = {
|
|||
Sorter: Captcha["SortNode"][];
|
||||
Selection: OakSelection<"select", Captcha["Projection"], Captcha["Filter"], Captcha["Sorter"]>;
|
||||
Aggregation: DeduceAggregation<Captcha["Projection"], Captcha["Filter"], Captcha["Sorter"]>;
|
||||
CreateOperationData: FormCreateData<BaseCaptcha.OpSchema>;
|
||||
CreateOperationData: FormCreateData<BaseCaptcha.OpSchema & {
|
||||
application?: OakOperation<"create", Application["CreateOperationData"]> | OakOperation<BaseApplication.OpUpdateAction, Application["UpdateOperationData"], Application["Filter"]>;
|
||||
}>;
|
||||
CreateSingle: OakOperation<"create", Captcha["CreateOperationData"]>;
|
||||
CreateMulti: OakOperation<"create", Array<Captcha["CreateOperationData"]>>;
|
||||
Create: Captcha["CreateSingle"] | Captcha["CreateMulti"];
|
||||
UpdateOperationData: FormUpdateData<BaseCaptcha.OpSchema>;
|
||||
UpdateOperationData: FormUpdateData<BaseCaptcha.OpSchema & {
|
||||
application?: OakOperation<"create", Application["CreateOperationData"]> | OakOperation<BaseApplication.OpUpdateAction, Application["UpdateOperationData"], Application["Filter"]> | OakOperation<"remove", Application["RemoveOperationData"], Application["Filter"]>;
|
||||
}>;
|
||||
Update: OakOperation<BaseCaptcha.OpUpdateAction, Captcha["UpdateOperationData"], Captcha["Filter"], Captcha["Sorter"]>;
|
||||
RemoveOperationData: {};
|
||||
Remove: OakOperation<"remove", Captcha["RemoveOperationData"], Captcha["Filter"], Captcha["Sorter"]>;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,6 @@ export declare function syncMessageTemplate<ED extends EntityDict>(params: {
|
|||
example: string;
|
||||
keywordEnumValueList: {
|
||||
keywordCode: string;
|
||||
enumValueList: string[];
|
||||
enumValueList: Array<string>;
|
||||
}[];
|
||||
}[]>;
|
||||
|
|
|
|||
|
|
@ -2050,6 +2050,7 @@ async function sendCaptchaByMobile({ mobile, env, type: captchaType, }, context)
|
|||
expired: false,
|
||||
expiresAt: now + duration * 60 * 1000,
|
||||
type: captchaType,
|
||||
applicationId: application?.id,
|
||||
},
|
||||
}, {
|
||||
dontCollect: true,
|
||||
|
|
@ -2181,6 +2182,7 @@ async function sendCaptchaByEmail({ email, env, type: captchaType, }, context) {
|
|||
// }
|
||||
code = Array.from({ length: digit }, () => Math.floor(Math.random() * 10)).join('');
|
||||
const id = await (0, uuid_1.generateNewIdAsync)();
|
||||
const applicationId = context.getApplication()?.id;
|
||||
await context.operate('captcha', {
|
||||
id: await (0, uuid_1.generateNewIdAsync)(),
|
||||
action: 'create',
|
||||
|
|
@ -2194,6 +2196,7 @@ async function sendCaptchaByEmail({ email, env, type: captchaType, }, context) {
|
|||
expired: false,
|
||||
expiresAt: now + duration * 60 * 1000,
|
||||
type: captchaType,
|
||||
applicationId,
|
||||
},
|
||||
}, {
|
||||
dontCollect: true,
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import { EntityShape } from 'oak-domain/lib/types/Entity';
|
|||
import { String, Text, Boolean, Datetime } from 'oak-domain/lib/types/DataType';
|
||||
import { ActionDef } from 'oak-domain/lib/types';
|
||||
import { EntityDesc } from 'oak-domain/lib/types/EntityDesc';
|
||||
import { Schema as Application } from './Application';
|
||||
export interface Schema extends EntityShape {
|
||||
origin: 'mobile' | 'email';
|
||||
content: String<32>;
|
||||
|
|
@ -12,6 +13,7 @@ export interface Schema extends EntityShape {
|
|||
expired: Boolean;
|
||||
expiresAt: Datetime;
|
||||
type: 'login' | 'changePassword' | 'confirm';
|
||||
application?: Application;
|
||||
}
|
||||
export type IState = 'unsent' | 'sending' | 'sent' | 'failure';
|
||||
export type IAction = 'send' | 'success' | 'fail';
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ exports.entityDesc = {
|
|||
expiresAt: '过期时间',
|
||||
iState: '状态',
|
||||
type: '类型',
|
||||
application: '应用',
|
||||
},
|
||||
action: {
|
||||
send: '发送',
|
||||
|
|
|
|||
|
|
@ -47,6 +47,10 @@ exports.desc = {
|
|||
type: "enum",
|
||||
enumeration: ["login", "changePassword", "confirm"]
|
||||
},
|
||||
applicationId: {
|
||||
type: "ref",
|
||||
ref: "application"
|
||||
},
|
||||
iState: {
|
||||
type: "enum",
|
||||
enumeration: ["unsent", "sending", "sent", "failure"]
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import { ForeignKey } from "oak-domain/lib/types/DataType";
|
||||
import { Q_DateValue, Q_BooleanValue, Q_NumberValue, Q_StringValue, Q_EnumValue, NodeId, ExprOp, ExpressionKey } from "oak-domain/lib/types/Demand";
|
||||
import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/Entity";
|
||||
import { Action, ParticularAction, IState } from "./Action";
|
||||
|
|
@ -12,6 +13,7 @@ export type OpSchema = EntityShape & {
|
|||
expired: Boolean;
|
||||
expiresAt: Datetime;
|
||||
type: "login" | "changePassword" | "confirm";
|
||||
applicationId?: ForeignKey<"application"> | null;
|
||||
iState?: IState | null;
|
||||
} & {
|
||||
[A in ExpressionKey]?: any;
|
||||
|
|
@ -31,6 +33,7 @@ export type OpFilter = {
|
|||
expired: Q_BooleanValue;
|
||||
expiresAt: Q_DateValue;
|
||||
type: Q_EnumValue<"login" | "changePassword" | "confirm">;
|
||||
applicationId: Q_StringValue;
|
||||
iState: Q_EnumValue<IState>;
|
||||
} & ExprOp<OpAttr | string>;
|
||||
export type OpProjection = {
|
||||
|
|
@ -49,6 +52,7 @@ export type OpProjection = {
|
|||
expired?: number;
|
||||
expiresAt?: number;
|
||||
type?: number;
|
||||
applicationId?: number;
|
||||
iState?: number;
|
||||
} & Partial<ExprOp<OpAttr | string>>;
|
||||
export type OpSortAttr = Partial<{
|
||||
|
|
@ -64,6 +68,7 @@ export type OpSortAttr = Partial<{
|
|||
expired: number;
|
||||
expiresAt: number;
|
||||
type: number;
|
||||
applicationId: number;
|
||||
iState: number;
|
||||
[k: string]: any;
|
||||
} | ExprOp<OpAttr | string>>;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,8 @@
|
|||
"expired": "是否过期",
|
||||
"expiresAt": "过期时间",
|
||||
"iState": "状态",
|
||||
"type": "类型"
|
||||
"type": "类型",
|
||||
"application": "应用"
|
||||
},
|
||||
"action": {
|
||||
"send": "发送",
|
||||
|
|
|
|||
|
|
@ -1038,6 +1038,7 @@ export type Application = {
|
|||
system: System["Schema"];
|
||||
domain?: Domain["Schema"];
|
||||
applicationPassport$application?: Array<Omit<ApplicationPassport["Schema"], "application">>;
|
||||
captcha$application?: Array<Omit<Captcha["Schema"], "application">>;
|
||||
extraFile$application?: Array<Omit<ExtraFile["Schema"], "application">>;
|
||||
notification$application?: Array<Omit<Notification["Schema"], "application">>;
|
||||
sessionMessage$application?: Array<Omit<SessionMessage["Schema"], "application">>;
|
||||
|
|
@ -1050,6 +1051,7 @@ export type Application = {
|
|||
wechatUser$application?: Array<Omit<WechatUser["Schema"], "application">>;
|
||||
session$entity?: Array<Omit<Session["Schema"], "entity">>;
|
||||
applicationPassport$application$$aggr?: AggregationResult<Omit<ApplicationPassport["Schema"], "application">>;
|
||||
captcha$application$$aggr?: AggregationResult<Omit<Captcha["Schema"], "application">>;
|
||||
extraFile$application$$aggr?: AggregationResult<Omit<ExtraFile["Schema"], "application">>;
|
||||
notification$application$$aggr?: AggregationResult<Omit<Notification["Schema"], "application">>;
|
||||
sessionMessage$application$$aggr?: AggregationResult<Omit<SessionMessage["Schema"], "application">>;
|
||||
|
|
@ -1071,6 +1073,12 @@ export type Application = {
|
|||
applicationPassport$application$$aggr?: DeduceAggregation<Omit<ApplicationPassport["Projection"], "application">, Omit<ApplicationPassport["Filter"], "application">, ApplicationPassport["Sorter"]> & {
|
||||
$entity: "applicationPassport";
|
||||
};
|
||||
captcha$application?: OakSelection<"select", Omit<Captcha["Projection"], "application">, Omit<Captcha["Filter"], "application">, Captcha["Sorter"]> & {
|
||||
$entity: "captcha";
|
||||
};
|
||||
captcha$application$$aggr?: DeduceAggregation<Omit<Captcha["Projection"], "application">, Omit<Captcha["Filter"], "application">, Captcha["Sorter"]> & {
|
||||
$entity: "captcha";
|
||||
};
|
||||
extraFile$application?: OakSelection<"select", Omit<ExtraFile["Projection"], "application">, Omit<ExtraFile["Filter"], "application">, ExtraFile["Sorter"]> & {
|
||||
$entity: "extraFile";
|
||||
};
|
||||
|
|
@ -1142,6 +1150,7 @@ export type Application = {
|
|||
system: MakeFilter<System["FilterUnit"]>;
|
||||
domain: MakeFilter<Domain["FilterUnit"]>;
|
||||
applicationPassport$application: MakeFilter<Omit<ApplicationPassport["FilterUnit"], "application">> & SubQueryPredicateMetadata;
|
||||
captcha$application: MakeFilter<Omit<Captcha["FilterUnit"], "application">> & SubQueryPredicateMetadata;
|
||||
extraFile$application: MakeFilter<Omit<ExtraFile["FilterUnit"], "application">> & SubQueryPredicateMetadata;
|
||||
notification$application: MakeFilter<Omit<Notification["FilterUnit"], "application">> & SubQueryPredicateMetadata;
|
||||
sessionMessage$application: MakeFilter<Omit<SessionMessage["FilterUnit"], "application">> & SubQueryPredicateMetadata;
|
||||
|
|
@ -1170,6 +1179,7 @@ export type Application = {
|
|||
system?: OakOperation<"create", System["CreateOperationData"]> | OakOperation<BaseSystem.OpUpdateAction, System["UpdateOperationData"], System["Filter"]>;
|
||||
domain?: OakOperation<"create", Domain["CreateOperationData"]> | OakOperation<BaseDomain.OpUpdateAction, Domain["UpdateOperationData"], Domain["Filter"]>;
|
||||
applicationPassport$application?: (OakOperation<"create", Omit<ApplicationPassport["CreateOperationData"], "application"> | Omit<ApplicationPassport["CreateOperationData"], "application">[]> | OakOperation<BaseApplicationPassport.OpUpdateAction, Omit<ApplicationPassport["UpdateOperationData"], "application">, ApplicationPassport["Filter"]>)[];
|
||||
captcha$application?: (OakOperation<"create", Omit<Captcha["CreateOperationData"], "application"> | Omit<Captcha["CreateOperationData"], "application">[]> | OakOperation<BaseCaptcha.OpUpdateAction, Omit<Captcha["UpdateOperationData"], "application">, Captcha["Filter"]>)[];
|
||||
extraFile$application?: (OakOperation<"create", Omit<ExtraFile["CreateOperationData"], "application"> | Omit<ExtraFile["CreateOperationData"], "application">[]> | OakOperation<BaseExtraFile.OpUpdateAction, Omit<ExtraFile["UpdateOperationData"], "application">, ExtraFile["Filter"]>)[];
|
||||
notification$application?: (OakOperation<"create", Omit<Notification["CreateOperationData"], "application"> | Omit<Notification["CreateOperationData"], "application">[]> | OakOperation<BaseNotification.OpUpdateAction, Omit<Notification["UpdateOperationData"], "application">, Notification["Filter"]>)[];
|
||||
sessionMessage$application?: (OakOperation<"create", Omit<SessionMessage["CreateOperationData"], "application"> | Omit<SessionMessage["CreateOperationData"], "application">[]> | OakOperation<BaseSessionMessage.OpUpdateAction, Omit<SessionMessage["UpdateOperationData"], "application">, SessionMessage["Filter"]>)[];
|
||||
|
|
@ -1189,6 +1199,7 @@ export type Application = {
|
|||
system?: OakOperation<"create", System["CreateOperationData"]> | OakOperation<BaseSystem.OpUpdateAction, System["UpdateOperationData"], System["Filter"]> | OakOperation<"remove", System["RemoveOperationData"], System["Filter"]>;
|
||||
domain?: OakOperation<"create", Domain["CreateOperationData"]> | OakOperation<BaseDomain.OpUpdateAction, Domain["UpdateOperationData"], Domain["Filter"]> | OakOperation<"remove", Domain["RemoveOperationData"], Domain["Filter"]>;
|
||||
applicationPassport$application?: (OakOperation<"create", Omit<ApplicationPassport["CreateOperationData"], "application"> | Omit<ApplicationPassport["CreateOperationData"], "application">[]> | OakOperation<BaseApplicationPassport.OpUpdateAction, Omit<ApplicationPassport["UpdateOperationData"], "application">, ApplicationPassport["Filter"]> | OakOperation<"remove", ApplicationPassport["RemoveOperationData"], ApplicationPassport["Filter"]>)[];
|
||||
captcha$application?: (OakOperation<"create", Omit<Captcha["CreateOperationData"], "application"> | Omit<Captcha["CreateOperationData"], "application">[]> | OakOperation<BaseCaptcha.OpUpdateAction, Omit<Captcha["UpdateOperationData"], "application">, Captcha["Filter"]> | OakOperation<"remove", Captcha["RemoveOperationData"], Captcha["Filter"]>)[];
|
||||
extraFile$application?: (OakOperation<"create", Omit<ExtraFile["CreateOperationData"], "application"> | Omit<ExtraFile["CreateOperationData"], "application">[]> | OakOperation<BaseExtraFile.OpUpdateAction, Omit<ExtraFile["UpdateOperationData"], "application">, ExtraFile["Filter"]> | OakOperation<"remove", ExtraFile["RemoveOperationData"], ExtraFile["Filter"]>)[];
|
||||
notification$application?: (OakOperation<"create", Omit<Notification["CreateOperationData"], "application"> | Omit<Notification["CreateOperationData"], "application">[]> | OakOperation<BaseNotification.OpUpdateAction, Omit<Notification["UpdateOperationData"], "application">, Notification["Filter"]> | OakOperation<"remove", Notification["RemoveOperationData"], Notification["Filter"]>)[];
|
||||
sessionMessage$application?: (OakOperation<"create", Omit<SessionMessage["CreateOperationData"], "application"> | Omit<SessionMessage["CreateOperationData"], "application">[]> | OakOperation<BaseSessionMessage.OpUpdateAction, Omit<SessionMessage["UpdateOperationData"], "application">, SessionMessage["Filter"]> | OakOperation<"remove", SessionMessage["RemoveOperationData"], SessionMessage["Filter"]>)[];
|
||||
|
|
@ -1447,11 +1458,19 @@ export type ArticleMenu = {
|
|||
export type Captcha = {
|
||||
OpSchema: BaseCaptcha.OpSchema;
|
||||
Action: BaseCaptcha.OpAction;
|
||||
Schema: BaseCaptcha.OpSchema & {};
|
||||
Projection: BaseCaptcha.OpProjection & {};
|
||||
FilterUnit: BaseCaptcha.OpFilter & {};
|
||||
Schema: BaseCaptcha.OpSchema & {
|
||||
application?: Application["Schema"];
|
||||
};
|
||||
Projection: BaseCaptcha.OpProjection & {
|
||||
application?: Application["Projection"];
|
||||
};
|
||||
FilterUnit: BaseCaptcha.OpFilter & {
|
||||
application: MakeFilter<Application["FilterUnit"]>;
|
||||
};
|
||||
Filter: MakeFilter<Captcha["FilterUnit"]>;
|
||||
SortAttr: Partial<BaseCaptcha.OpSortAttr | {}>;
|
||||
SortAttr: Partial<BaseCaptcha.OpSortAttr | {
|
||||
application: Application["SortAttr"];
|
||||
}>;
|
||||
SortNode: {
|
||||
$attr: Captcha["SortAttr"];
|
||||
$direction?: "asc" | "desc";
|
||||
|
|
@ -1459,11 +1478,15 @@ export type Captcha = {
|
|||
Sorter: Captcha["SortNode"][];
|
||||
Selection: OakSelection<"select", Captcha["Projection"], Captcha["Filter"], Captcha["Sorter"]>;
|
||||
Aggregation: DeduceAggregation<Captcha["Projection"], Captcha["Filter"], Captcha["Sorter"]>;
|
||||
CreateOperationData: FormCreateData<BaseCaptcha.OpSchema>;
|
||||
CreateOperationData: FormCreateData<BaseCaptcha.OpSchema & {
|
||||
application?: OakOperation<"create", Application["CreateOperationData"]> | OakOperation<BaseApplication.OpUpdateAction, Application["UpdateOperationData"], Application["Filter"]>;
|
||||
}>;
|
||||
CreateSingle: OakOperation<"create", Captcha["CreateOperationData"]>;
|
||||
CreateMulti: OakOperation<"create", Array<Captcha["CreateOperationData"]>>;
|
||||
Create: Captcha["CreateSingle"] | Captcha["CreateMulti"];
|
||||
UpdateOperationData: FormUpdateData<BaseCaptcha.OpSchema>;
|
||||
UpdateOperationData: FormUpdateData<BaseCaptcha.OpSchema & {
|
||||
application?: OakOperation<"create", Application["CreateOperationData"]> | OakOperation<BaseApplication.OpUpdateAction, Application["UpdateOperationData"], Application["Filter"]> | OakOperation<"remove", Application["RemoveOperationData"], Application["Filter"]>;
|
||||
}>;
|
||||
Update: OakOperation<BaseCaptcha.OpUpdateAction, Captcha["UpdateOperationData"], Captcha["Filter"], Captcha["Sorter"]>;
|
||||
RemoveOperationData: {};
|
||||
Remove: OakOperation<"remove", Captcha["RemoveOperationData"], Captcha["Filter"], Captcha["Sorter"]>;
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
|
||||
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
|
||||
export default _default;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.tryMakeEmailNotification = exports.tryMakeSmsNotification = exports.registerMessageNotificationConverters = void 0;
|
||||
exports.registerMessageNotificationConverters = registerMessageNotificationConverters;
|
||||
exports.tryMakeSmsNotification = tryMakeSmsNotification;
|
||||
exports.tryMakeEmailNotification = tryMakeEmailNotification;
|
||||
const uuid_1 = require("oak-domain/lib/utils/uuid");
|
||||
const assert_1 = require("oak-domain/lib/utils/assert");
|
||||
const lodash_1 = require("oak-domain/lib/utils/lodash");
|
||||
|
|
@ -11,7 +13,6 @@ function registerMessageNotificationConverters(converters) {
|
|||
ConverterDict[ele.type] = ele;
|
||||
});
|
||||
}
|
||||
exports.registerMessageNotificationConverters = registerMessageNotificationConverters;
|
||||
const InitialChannelByWeightMatrix = {
|
||||
high: ['wechatMp', 'wechatPublic', 'sms', 'email'],
|
||||
medium: ['wechatMp', 'wechatPublic', 'email'],
|
||||
|
|
@ -46,7 +47,6 @@ async function tryMakeSmsNotification(message, context) {
|
|||
}
|
||||
}
|
||||
}
|
||||
exports.tryMakeSmsNotification = tryMakeSmsNotification;
|
||||
async function tryMakeEmailNotification(message, context) {
|
||||
const { userId, type, entity, entityId, router } = message;
|
||||
const converter = ConverterDict[type] && ConverterDict[type].toEmail;
|
||||
|
|
@ -61,7 +61,6 @@ async function tryMakeEmailNotification(message, context) {
|
|||
}
|
||||
}
|
||||
}
|
||||
exports.tryMakeEmailNotification = tryMakeEmailNotification;
|
||||
async function createNotification(message, context) {
|
||||
const { restriction, userId, weight, type, entity, entityId, platformId, channels } = message;
|
||||
(0, assert_1.assert)(userId);
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ export declare function getEmail<ED extends EntityDict>(origin: string): Email<E
|
|||
export declare function getOrigin(): string[];
|
||||
export declare function sendEmail<ED extends EntityDict>(options: EmailOptions, context: BRC<ED>): Promise<{
|
||||
success: boolean;
|
||||
error?: string | undefined;
|
||||
error?: string;
|
||||
} | {
|
||||
success: boolean;
|
||||
error: unknown;
|
||||
|
|
|
|||
|
|
@ -2718,6 +2718,7 @@ export async function sendCaptchaByMobile<ED extends EntityDict>(
|
|||
expired: false,
|
||||
expiresAt: now + duration * 60 * 1000,
|
||||
type: captchaType,
|
||||
applicationId: application?.id!,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
@ -2885,6 +2886,7 @@ export async function sendCaptchaByEmail<ED extends EntityDict>(
|
|||
// }
|
||||
code = Array.from({ length: digit }, () => Math.floor(Math.random() * 10)).join('');
|
||||
const id = await generateNewIdAsync();
|
||||
const applicationId = context.getApplication()?.id!;
|
||||
await context.operate(
|
||||
'captcha',
|
||||
{
|
||||
|
|
@ -2900,6 +2902,7 @@ export async function sendCaptchaByEmail<ED extends EntityDict>(
|
|||
expired: false,
|
||||
expiresAt: now + duration * 60 * 1000,
|
||||
type: captchaType,
|
||||
applicationId,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import { ActionType, EntityShape } from 'oak-domain/lib/types/Entity';
|
|||
import { String, Text, Boolean, Datetime } from 'oak-domain/lib/types/DataType';
|
||||
import { ActionDef, Index } from 'oak-domain/lib/types';
|
||||
import { EntityDesc } from 'oak-domain/lib/types/EntityDesc';
|
||||
import { Schema as Application } from './Application';
|
||||
|
||||
export interface Schema extends EntityShape {
|
||||
origin: 'mobile' | 'email';
|
||||
|
|
@ -13,6 +14,7 @@ export interface Schema extends EntityShape {
|
|||
expired: Boolean;
|
||||
expiresAt: Datetime;
|
||||
type: 'login' | 'changePassword' | 'confirm';
|
||||
application?: Application;
|
||||
};
|
||||
|
||||
export type IState = 'unsent' | 'sending' | 'sent' | 'failure';
|
||||
|
|
@ -47,6 +49,7 @@ export const entityDesc: EntityDesc<Schema, Action, '', {
|
|||
expiresAt: '过期时间',
|
||||
iState: '状态',
|
||||
type: '类型',
|
||||
application: '应用',
|
||||
},
|
||||
action: {
|
||||
send: '发送',
|
||||
|
|
|
|||
Loading…
Reference in New Issue