Merge branch 'dev' into release

This commit is contained in:
Xu Chang 2024-09-16 17:59:49 +08:00
commit d548388b6c
50 changed files with 710 additions and 306 deletions

View File

@ -1,2 +1,2 @@
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
export default checkers;

View File

@ -60,13 +60,6 @@ export default OakComponent({
onTapItem(e) {
const index = e.currentTarget.dataset.index;
const url = this.props.list[index].pagePath;
this.triggerEvent('oaktap', {
index,
item: this.props.list[index],
});
if (!url) {
return;
}
// 切换路由
this.switchTab({
url,

View File

@ -14,21 +14,21 @@ declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends key
type?: ButtonProps['type'] | AmButtonProps['type'];
executeText?: string | undefined;
buttonProps?: (ButtonProps & {
color?: "success" | "warning" | "default" | "primary" | "danger" | undefined;
color?: "primary" | "success" | "warning" | "default" | "danger" | undefined;
fill?: "none" | "solid" | "outline" | undefined;
size?: "small" | "middle" | "large" | "mini" | undefined;
size?: "small" | "large" | "middle" | "mini" | undefined;
block?: boolean | undefined;
loading?: boolean | "auto" | undefined;
loadingText?: string | undefined;
loadingIcon?: import("react").ReactNode;
disabled?: boolean | undefined;
onClick?: ((event: import("react").MouseEvent<HTMLButtonElement, MouseEvent>) => unknown) | undefined;
type?: "button" | "submit" | "reset" | undefined;
type?: "reset" | "submit" | "button" | undefined;
shape?: "default" | "rounded" | "rectangular" | undefined;
children?: import("react").ReactNode;
} & Pick<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement>, "id" | "onMouseDown" | "onMouseUp" | "onTouchEnd" | "onTouchStart"> & {
} & Pick<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement>, "id" | "onMouseUp" | "onMouseDown" | "onTouchStart" | "onTouchEnd"> & {
className?: string | undefined;
style?: (import("react").CSSProperties & Partial<Record<"--background-color" | "--border-color" | "--text-color" | "--border-width" | "--border-radius" | "--border-style", string>>) | undefined;
style?: (import("react").CSSProperties & Partial<Record<"--text-color" | "--background-color" | "--border-radius" | "--border-width" | "--border-style" | "--border-color", string>>) | undefined;
tabIndex?: number | undefined;
} & import("react").AriaAttributes) | undefined;
afterCommit?: AfterCommit;

View File

@ -4,8 +4,8 @@ declare const _default: (props: import("oak-frontend-base").ReactComponentProps<
entity: keyof EntityDict;
entityFilter: any;
relationIds: string[];
rule: "all" | "single" | "free";
ruleOnRow: "all" | "single" | "free";
rule: "single" | "all" | "free";
ruleOnRow: "single" | "all" | "free";
onPickRelations: (ids: string[]) => void;
onPickRows: (ids: string[]) => void;
pickedRowIds: string[] | undefined;

View File

@ -11,7 +11,7 @@ declare const _default: (props: import("oak-frontend-base").ReactComponentProps<
claimUrl: string;
qrCodeType: QrCodeType;
multiple: boolean;
rule: "all" | "single" | "free";
ruleOnRow: "all" | "single" | "free";
rule: "single" | "all" | "free";
ruleOnRow: "single" | "all" | "free";
}>) => React.ReactElement;
export default _default;

View File

@ -90,6 +90,7 @@ export class BackendRuntimeContext extends BRC {
id: 1,
isRoot: 1,
},
playerId: 1,
},
filter: {
$or: [

View File

@ -15,6 +15,7 @@ export interface Schema extends User {
codes: Array<WechatQrCode>;
isRoot?: Boolean;
addresses?: Address[];
hasPassword?: Boolean;
}
export type IdAction = 'verify' | 'accept' | 'reject';
export type IdState = 'unverified' | 'verified' | 'verifying';

View File

@ -36,6 +36,7 @@ export const entityDesc = {
codes: '微信分享二维码',
isRoot: '是否超级用户',
addresses: '收货地址',
hasPassword: '用户是否存在密码'
},
action: {
activate: '激活',

View File

@ -1,7 +1,13 @@
export declare const actionDefDict: {
log: {
iState: import("oak-domain/lib/types").ActionDef<string, string>;
};
modi: {
iState: import("oak-domain/lib/types").ActionDef<string, string>;
};
oper: {
iState: import("oak-domain/lib/types").ActionDef<string, string>;
};
captcha: {
iState: import("oak-domain/lib/types").ActionDef<string, string>;
};

View File

@ -1,4 +1,6 @@
import { actionDefDict as log } from "./Log/Action";
import { actionDefDict as modi } from "./Modi/Action";
import { actionDefDict as oper } from "./Oper/Action";
import { actionDefDict as captcha } from "./Captcha/Action";
import { actionDefDict as email } from "./Email/Action";
import { actionDefDict as loginName } from "./LoginName/Action";
@ -15,7 +17,9 @@ import { actionDefDict as wechatLogin } from "./WechatLogin/Action";
import { actionDefDict as wechatMenu } from "./WechatMenu/Action";
import { actionDefDict as wechatPublicTag } from "./WechatPublicTag/Action";
export const actionDefDict = {
log,
modi,
oper,
captcha,
email,
loginName,

View File

@ -1,5 +1,6 @@
import { EntityDef as ActionAuth } from "./ActionAuth/Schema";
import { EntityDef as I18n } from "./I18n/Schema";
import { EntityDef as Log } from "./Log/Schema";
import { EntityDef as Modi } from "./Modi/Schema";
import { EntityDef as ModiEntity } from "./ModiEntity/Schema";
import { EntityDef as Oper } from "./Oper/Schema";
@ -58,6 +59,7 @@ import { EntityDef as WechatUser } from "./WechatUser/Schema";
export type EntityDict = {
actionAuth: ActionAuth;
i18n: I18n;
log: Log;
modi: Modi;
modiEntity: ModiEntity;
oper: Oper;

View File

@ -1,10 +1,11 @@
import { ForeignKey } from "oak-domain/lib/types/DataType";
import { Q_DateValue, Q_NumberValue, Q_StringValue, NodeId, MakeFilter, ExprOp, ExpressionKey, SubQueryPredicateMetadata } from "oak-domain/lib/types/Demand";
import { Q_DateValue, Q_NumberValue, Q_StringValue, Q_EnumValue, NodeId, MakeFilter, ExprOp, ExpressionKey, SubQueryPredicateMetadata } from "oak-domain/lib/types/Demand";
import { OneOf } from "oak-domain/lib/types/Polyfill";
import { FormCreateData, FormUpdateData, DeduceAggregation, Operation as OakOperation, Selection as OakSelection, MakeAction as OakMakeAction, AggregationResult, EntityShape } from "oak-domain/lib/types/Entity";
import { AppendOnlyAction } from "oak-domain/lib/actions/action";
import { Action, ParticularAction, IState } from "./Action";
import { String, Datetime } from "oak-domain/lib/types/DataType";
import * as User from "../User/Schema";
import * as Log from "../Log/Schema";
import * as OperEntity from "../OperEntity/Schema";
export type OpSchema = EntityShape & {
action: String<24>;
@ -14,6 +15,9 @@ export type OpSchema = EntityShape & {
operatorId?: ForeignKey<"user"> | null;
targetEntity: String<32>;
bornAt?: Datetime | null;
logId?: ForeignKey<"log"> | null;
undoData?: Object | null;
iState?: IState | null;
};
export type OpAttr = keyof OpSchema;
export type Schema = EntityShape & {
@ -24,7 +28,11 @@ export type Schema = EntityShape & {
operatorId?: ForeignKey<"user"> | null;
targetEntity: String<32>;
bornAt?: Datetime | null;
logId?: ForeignKey<"log"> | null;
undoData?: Object | null;
iState?: IState | null;
operator?: User.Schema | null;
log?: Log.Schema | null;
operEntity$oper?: Array<OperEntity.Schema>;
operEntity$oper$$aggr?: AggregationResult<OperEntity.Schema>;
} & {
@ -43,6 +51,10 @@ type AttrFilter = {
operator: User.Filter;
targetEntity: Q_StringValue;
bornAt: Q_DateValue;
logId: Q_StringValue;
log: Log.Filter;
undoData: Object;
iState: Q_EnumValue<IState>;
operEntity$oper: OperEntity.Filter & SubQueryPredicateMetadata;
};
export type Filter = MakeFilter<AttrFilter & ExprOp<OpAttr | string>>;
@ -61,6 +73,10 @@ export type Projection = {
operator?: User.Projection;
targetEntity?: number;
bornAt?: number;
logId?: number;
log?: Log.Projection;
undoData?: number | Object;
iState?: number;
operEntity$oper?: OperEntity.Selection & {
$entity: "operEntity";
};
@ -74,6 +90,9 @@ type OperIdProjection = OneOf<{
type UserIdProjection = OneOf<{
operatorId: number;
}>;
type LogIdProjection = OneOf<{
logId: number;
}>;
export type SortAttr = {
id: number;
} | {
@ -92,6 +111,12 @@ export type SortAttr = {
targetEntity: number;
} | {
bornAt: number;
} | {
logId: number;
} | {
log: Log.SortAttr;
} | {
iState: number;
} | {
[k: string]: any;
} | OneOf<ExprOp<OpAttr | string>>;
@ -103,7 +128,7 @@ export type Sorter = SortNode[];
export type SelectOperation<P extends Object = Projection> = OakSelection<"select", P, Filter, Sorter>;
export type Selection<P extends Object = Projection> = SelectOperation<P>;
export type Aggregation = DeduceAggregation<Projection, Filter, Sorter>;
export type CreateOperationData = FormCreateData<Omit<OpSchema, "operatorId">> & (({
export type CreateOperationData = FormCreateData<Omit<OpSchema, "operatorId" | "logId">> & (({
operatorId?: never;
operator?: User.CreateSingleOperation;
} | {
@ -112,13 +137,22 @@ export type CreateOperationData = FormCreateData<Omit<OpSchema, "operatorId">> &
} | {
operator?: never;
operatorId?: ForeignKey<"operator">;
}) & ({
logId?: never;
log?: Log.CreateSingleOperation;
} | {
logId: ForeignKey<"log">;
log?: Log.UpdateOperation;
} | {
log?: never;
logId?: ForeignKey<"log">;
})) & {
operEntity$oper?: OakOperation<"create", Omit<OperEntity.CreateOperationData, "oper" | "operId">[]> | Array<OakOperation<"create", Omit<OperEntity.CreateOperationData, "oper" | "operId">>>;
};
export type CreateSingleOperation = OakOperation<"create", CreateOperationData>;
export type CreateMultipleOperation = OakOperation<"create", Array<CreateOperationData>>;
export type CreateOperation = CreateSingleOperation | CreateMultipleOperation;
export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "operatorId">> & (({
export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "operatorId" | "logId">> & (({
operator?: User.CreateSingleOperation;
operatorId?: never;
} | {
@ -130,22 +164,37 @@ export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "operatorId">> &
} | {
operator?: never;
operatorId?: ForeignKey<"operator"> | null;
}) & ({
log?: Log.CreateSingleOperation;
logId?: never;
} | {
log?: Log.UpdateOperation;
logId?: never;
} | {
log?: Log.RemoveOperation;
logId?: never;
} | {
log?: never;
logId?: ForeignKey<"log"> | null;
})) & {
[k: string]: any;
operEntity$oper?: OakOperation<"create", Omit<OperEntity.CreateOperationData, "oper" | "operId">[]> | Array<OakOperation<"create", Omit<OperEntity.CreateOperationData, "oper" | "operId">>>;
};
export type UpdateOperation = OakOperation<"update" | string, UpdateOperationData, Filter, Sorter>;
export type UpdateOperation = OakOperation<"update" | ParticularAction | string, UpdateOperationData, Filter, Sorter>;
export type RemoveOperationData = {} & (({
operator?: User.UpdateOperation | User.RemoveOperation;
}) & ({
log?: Log.UpdateOperation | Log.RemoveOperation;
}));
export type RemoveOperation = OakOperation<"remove", RemoveOperationData, Filter, Sorter>;
export type Operation = CreateOperation | UpdateOperation | RemoveOperation;
export type UserIdSubQuery = Selection<UserIdProjection>;
export type LogIdSubQuery = Selection<LogIdProjection>;
export type OperIdSubQuery = Selection<OperIdProjection>;
export type EntityDef = {
Schema: Schema;
OpSchema: OpSchema;
Action: OakMakeAction<AppendOnlyAction> | string;
Action: OakMakeAction<Action> | string;
Selection: Selection;
Aggregation: Aggregation;
Operation: Operation;
@ -154,5 +203,6 @@ export type EntityDef = {
Remove: RemoveOperation;
CreateSingle: CreateSingleOperation;
CreateMulti: CreateMultipleOperation;
ParticularAction: ParticularAction;
};
export {};

View File

@ -1,4 +1,4 @@
import { appendOnlyActions as actions } from "oak-domain/lib/actions/action";
import { actions } from "./Action";
export const desc = {
attributes: {
action: {
@ -31,9 +31,20 @@ export const desc = {
},
bornAt: {
type: "datetime"
},
logId: {
type: "ref",
ref: "log"
},
undoData: {
type: "object"
},
iState: {
type: "enum",
enumeration: ["normal", "rollbacked"]
}
},
actionType: "appendOnly",
actionType: "crud",
actions,
indexes: [
{

View File

@ -1 +1 @@
{ "name": "操作", "attr": { "action": "动作", "data": "数据", "filter": "选择条件", "extra": "其它", "operator": "操作者", "targetEntity": "关联对象", "bornAt": "诞生时间" } }
{ "name": "操作", "attr": { "action": "动作", "data": "数据", "filter": "选择条件", "extra": "其它", "operator": "操作者", "targetEntity": "关联对象", "bornAt": "诞生时间", "log": "关联日志", "undoData": "回滚数据", "iState": "状态" }, "action": { "undo": "回滚", "redo": "重做" }, "v": { "iState": { "normal": "正常的", "rollbacked": "已回滚" } } }

View File

@ -186,6 +186,9 @@ export type Aggregation = DeduceAggregation<Projection, Filter, Sorter>;
export type CreateOperationData = FormCreateData<Omit<OpSchema, "entity" | "entityId" | "operId">> & (({
operId?: never;
oper: Oper.CreateSingleOperation;
} | {
operId: ForeignKey<"oper">;
oper?: Oper.UpdateOperation;
} | {
oper?: never;
operId: ForeignKey<"oper">;
@ -344,6 +347,12 @@ export type CreateOperation = CreateSingleOperation | CreateMultipleOperation;
export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "entity" | "entityId" | "operId">> & (({
oper?: Oper.CreateSingleOperation;
operId?: never;
} | {
oper?: Oper.UpdateOperation;
operId?: never;
} | {
oper?: Oper.RemoveOperation;
operId?: never;
} | {
oper?: never;
operId?: ForeignKey<"oper">;
@ -414,7 +423,9 @@ export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "entity" | "enti
[k: string]: any;
};
export type UpdateOperation = OakOperation<"update" | string, UpdateOperationData, Filter, Sorter>;
export type RemoveOperationData = {} & ({
export type RemoveOperationData = {} & (({
oper?: Oper.UpdateOperation | Oper.RemoveOperation;
})) & ({
user?: User.UpdateOperation | User.RemoveOperation;
} | {
userEntityGrant?: UserEntityGrant.UpdateOperation | UserEntityGrant.RemoveOperation;

View File

@ -1,5 +1,6 @@
import { desc as actionAuthDesc } from "./ActionAuth/Storage";
import { desc as i18nDesc } from "./I18n/Storage";
import { desc as logDesc } from "./Log/Storage";
import { desc as modiDesc } from "./Modi/Storage";
import { desc as modiEntityDesc } from "./ModiEntity/Storage";
import { desc as operDesc } from "./Oper/Storage";
@ -58,6 +59,7 @@ import { desc as wechatUserDesc } from "./WechatUser/Storage";
export const storageSchema = {
actionAuth: actionAuthDesc,
i18n: i18nDesc,
log: logDesc,
modi: modiDesc,
modiEntity: modiEntityDesc,
oper: operDesc,

View File

@ -1,4 +1,6 @@
import { style as log } from "./Log/Style";
import { style as modi } from "./Modi/Style";
import { style as oper } from "./Oper/Style";
import { style as application } from "./Application/Style";
import { style as area } from "./Area/Style";
import { style as captcha } from "./Captcha/Style";
@ -25,7 +27,9 @@ import { style as wechatPublicTag } from "./WechatPublicTag/Style";
import { style as wechatQrCode } from "./WechatQrCode/Style";
import { style as wechatUser } from "./WechatUser/Style";
export const styleDict = {
log,
modi,
oper,
application,
area,
captcha,

View File

@ -38,6 +38,7 @@ export type OpSchema = EntityShape & {
idCardType?: ("ID-Card" | "passport" | "Mainland-passport") | null;
idNumber?: String<32> | null;
isRoot?: Boolean | null;
hasPassword?: Boolean | null;
idState?: IdState | null;
userState?: UserState | null;
};
@ -53,6 +54,7 @@ export type Schema = EntityShape & {
idCardType?: ("ID-Card" | "passport" | "Mainland-passport") | null;
idNumber?: String<32> | null;
isRoot?: Boolean | null;
hasPassword?: Boolean | null;
idState?: IdState | null;
userState?: UserState | null;
ref?: Schema | null;
@ -123,6 +125,7 @@ type AttrFilter = {
idCardType: Q_EnumValue<"ID-Card" | "passport" | "Mainland-passport">;
idNumber: Q_StringValue;
isRoot: Q_BooleanValue;
hasPassword: Q_BooleanValue;
idState: Q_EnumValue<IdState>;
userState: Q_EnumValue<UserState>;
oper$operator: Oper.Filter & SubQueryPredicateMetadata;
@ -169,6 +172,7 @@ export type Projection = {
idCardType?: number;
idNumber?: number;
isRoot?: number;
hasPassword?: number;
idState?: number;
userState?: number;
oper$operator?: Oper.Selection & {
@ -350,6 +354,8 @@ export type SortAttr = {
idNumber: number;
} | {
isRoot: number;
} | {
hasPassword: number;
} | {
idState: number;
} | {
@ -375,7 +381,7 @@ export type CreateOperationData = FormCreateData<Omit<OpSchema, "refId">> & (({
ref?: never;
refId?: ForeignKey<"ref">;
})) & {
oper$operator?: OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">[]> | Array<OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">>>;
oper$operator?: OakOperation<Oper.UpdateOperation["action"], Omit<Oper.UpdateOperationData, "operator" | "operatorId">, Omit<Oper.Filter, "operator" | "operatorId">> | OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">[]> | Array<OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">> | OakOperation<Oper.UpdateOperation["action"], Omit<Oper.UpdateOperationData, "operator" | "operatorId">, Omit<Oper.Filter, "operator" | "operatorId">>>;
user$ref?: OakOperation<UpdateOperation["action"], Omit<UpdateOperationData, "ref" | "refId">, Omit<Filter, "ref" | "refId">> | OakOperation<"create", Omit<CreateOperationData, "ref" | "refId">[]> | Array<OakOperation<"create", Omit<CreateOperationData, "ref" | "refId">> | OakOperation<UpdateOperation["action"], Omit<UpdateOperationData, "ref" | "refId">, Omit<Filter, "ref" | "refId">>>;
userEntityClaim$user?: OakOperation<UserEntityClaim.UpdateOperation["action"], Omit<UserEntityClaim.UpdateOperationData, "user" | "userId">, Omit<UserEntityClaim.Filter, "user" | "userId">> | OakOperation<"create", Omit<UserEntityClaim.CreateOperationData, "user" | "userId">[]> | Array<OakOperation<"create", Omit<UserEntityClaim.CreateOperationData, "user" | "userId">> | OakOperation<UserEntityClaim.UpdateOperation["action"], Omit<UserEntityClaim.UpdateOperationData, "user" | "userId">, Omit<UserEntityClaim.Filter, "user" | "userId">>>;
userRelation$user?: OakOperation<UserRelation.UpdateOperation["action"], Omit<UserRelation.UpdateOperationData, "user" | "userId">, Omit<UserRelation.Filter, "user" | "userId">> | OakOperation<"create", Omit<UserRelation.CreateOperationData, "user" | "userId">[]> | Array<OakOperation<"create", Omit<UserRelation.CreateOperationData, "user" | "userId">> | OakOperation<UserRelation.UpdateOperation["action"], Omit<UserRelation.UpdateOperationData, "user" | "userId">, Omit<UserRelation.Filter, "user" | "userId">>>;
@ -417,7 +423,7 @@ export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "refId">> & (({
refId?: ForeignKey<"ref"> | null;
})) & {
[k: string]: any;
oper$operator?: OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">[]> | Array<OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">>>;
oper$operator?: OakOperation<Oper.UpdateOperation["action"], Omit<Oper.UpdateOperationData, "operator" | "operatorId">, Omit<Oper.Filter, "operator" | "operatorId">> | OakOperation<Oper.RemoveOperation["action"], Omit<Oper.RemoveOperationData, "operator" | "operatorId">, Omit<Oper.Filter, "operator" | "operatorId">> | OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">[]> | Array<OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">> | OakOperation<Oper.UpdateOperation["action"], Omit<Oper.UpdateOperationData, "operator" | "operatorId">, Omit<Oper.Filter, "operator" | "operatorId">> | OakOperation<Oper.RemoveOperation["action"], Omit<Oper.RemoveOperationData, "operator" | "operatorId">, Omit<Oper.Filter, "operator" | "operatorId">>>;
user$ref?: OakOperation<UpdateOperation["action"], Omit<UpdateOperationData, "ref" | "refId">, Omit<Filter, "ref" | "refId">> | OakOperation<RemoveOperation["action"], Omit<RemoveOperationData, "ref" | "refId">, Omit<Filter, "ref" | "refId">> | OakOperation<"create", Omit<CreateOperationData, "ref" | "refId">[]> | Array<OakOperation<"create", Omit<CreateOperationData, "ref" | "refId">> | OakOperation<UpdateOperation["action"], Omit<UpdateOperationData, "ref" | "refId">, Omit<Filter, "ref" | "refId">> | OakOperation<RemoveOperation["action"], Omit<RemoveOperationData, "ref" | "refId">, Omit<Filter, "ref" | "refId">>>;
userEntityClaim$user?: OakOperation<UserEntityClaim.UpdateOperation["action"], Omit<UserEntityClaim.UpdateOperationData, "user" | "userId">, Omit<UserEntityClaim.Filter, "user" | "userId">> | OakOperation<UserEntityClaim.RemoveOperation["action"], Omit<UserEntityClaim.RemoveOperationData, "user" | "userId">, Omit<UserEntityClaim.Filter, "user" | "userId">> | OakOperation<"create", Omit<UserEntityClaim.CreateOperationData, "user" | "userId">[]> | Array<OakOperation<"create", Omit<UserEntityClaim.CreateOperationData, "user" | "userId">> | OakOperation<UserEntityClaim.UpdateOperation["action"], Omit<UserEntityClaim.UpdateOperationData, "user" | "userId">, Omit<UserEntityClaim.Filter, "user" | "userId">> | OakOperation<UserEntityClaim.RemoveOperation["action"], Omit<UserEntityClaim.RemoveOperationData, "user" | "userId">, Omit<UserEntityClaim.Filter, "user" | "userId">>>;
userRelation$user?: OakOperation<UserRelation.UpdateOperation["action"], Omit<UserRelation.UpdateOperationData, "user" | "userId">, Omit<UserRelation.Filter, "user" | "userId">> | OakOperation<UserRelation.RemoveOperation["action"], Omit<UserRelation.RemoveOperationData, "user" | "userId">, Omit<UserRelation.Filter, "user" | "userId">> | OakOperation<"create", Omit<UserRelation.CreateOperationData, "user" | "userId">[]> | Array<OakOperation<"create", Omit<UserRelation.CreateOperationData, "user" | "userId">> | OakOperation<UserRelation.UpdateOperation["action"], Omit<UserRelation.UpdateOperationData, "user" | "userId">, Omit<UserRelation.Filter, "user" | "userId">> | OakOperation<UserRelation.RemoveOperation["action"], Omit<UserRelation.RemoveOperationData, "user" | "userId">, Omit<UserRelation.Filter, "user" | "userId">>>;

View File

@ -43,6 +43,9 @@ export const desc = {
isRoot: {
type: "boolean"
},
hasPassword: {
type: "boolean"
},
idState: {
type: "enum",
enumeration: ["unverified", "verified", "verifying"]

View File

@ -1 +1 @@
{ "name": "用户", "attr": { "name": "姓名", "nickname": "昵称", "birth": "生日", "password": "密码", "passwordSha1": "sha1加密密码", "gender": "性别", "idCardType": "证件类型", "idNumber": "证件号码", "ref": "指向用户", "files": "相关文件", "userState": "用户状态", "idState": "认证状态", "codes": "微信分享二维码", "isRoot": "是否超级用户", "addresses": "收货地址" }, "action": { "activate": "激活", "accept": "同意", "verify": "认证", "reject": "拒绝", "enable": "启用", "disable": "禁用", "mergeTo": "合并", "mergeFrom": "使合并" }, "v": { "userState": { "shadow": "未激活", "normal": "正常", "disabled": "禁用", "merged": "已被合并" }, "idState": { "unverified": "未认证", "verifying": "认证中", "verified": "已认证" }, "gender": { "male": "男", "female": "女" }, "idCardType": { "ID-Card": "身份证", "passport": "护照", "Mainland-passport": "港澳台通行证" } } }
{ "name": "用户", "attr": { "name": "姓名", "nickname": "昵称", "birth": "生日", "password": "密码", "passwordSha1": "sha1加密密码", "gender": "性别", "idCardType": "证件类型", "idNumber": "证件号码", "ref": "指向用户", "files": "相关文件", "userState": "用户状态", "idState": "认证状态", "codes": "微信分享二维码", "isRoot": "是否超级用户", "addresses": "收货地址", "hasPassword": "用户是否存在密码" }, "action": { "activate": "激活", "accept": "同意", "verify": "认证", "reject": "拒绝", "enable": "启用", "disable": "禁用", "mergeTo": "合并", "mergeFrom": "使合并" }, "v": { "userState": { "shadow": "未激活", "normal": "正常", "disabled": "禁用", "merged": "已被合并" }, "idState": { "unverified": "未认证", "verifying": "认证中", "verified": "已认证" }, "gender": { "male": "男", "female": "女" }, "idCardType": { "ID-Card": "身份证", "passport": "护照", "Mainland-passport": "港澳台通行证" } } }

View File

@ -1,5 +1,6 @@
import * as ActionAuth from "./ActionAuth/Schema";
import * as I18n from "./I18n/Schema";
import * as Log from "./Log/Schema";
import * as Modi from "./Modi/Schema";
import * as ModiEntity from "./ModiEntity/Schema";
import * as Oper from "./Oper/Schema";
@ -65,6 +66,13 @@ export type I18nIdSubQuery = {
entity: "i18n";
}) | any;
};
export type LogIdSubQuery = {
[K in "$in" | "$nin"]?: (Oper.LogIdSubQuery & {
entity: "oper";
}) | (Log.LogIdSubQuery & {
entity: "log";
}) | any;
};
export type ModiIdSubQuery = {
[K in "$in" | "$nin"]?: (ModiEntity.ModiIdSubQuery & {
entity: "modiEntity";

View File

@ -1,2 +1,2 @@
declare const _default: (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, "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, "message", 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, "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, "parasite", 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, "sessionMessage", 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, "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, "application", 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, "sessionMessage", 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>>)[];
export default _default;

View File

@ -19,6 +19,9 @@ const triggers = [
if (!userData.nickname) {
userData.nickname = randomName('user_', 8);
}
if (userData.password || userData.passwordSha1) {
userData.hasPassword = true;
}
userData.userSystem$user = [
{
id: await generateNewIdAsync(),
@ -41,6 +44,29 @@ const triggers = [
return 1;
},
},
{
name: '当用户更新信息带有密码时将hasPassword附上true',
entity: 'user',
action: 'update',
when: 'before',
fn: async ({ operation }, context) => {
const { data, filter } = operation;
const setData = async (userData) => {
if (userData.password || userData.passwordSha1) {
userData.hasPassword = true;
}
};
if (data instanceof Array) {
for (const item of data) {
await setData(item);
}
}
else {
await setData(data);
}
return 1;
},
},
{
name: '系统生成的第一个用户默认注册为root用户的初始状态默认为shadow',
entity: 'user',

View File

@ -8,6 +8,7 @@ const userProjection = {
gender: 1,
birth: 1,
isRoot: 1,
hasPassword: 1,
extraFile$entity: {
$entity: 'extraFile',
data: {
@ -37,27 +38,43 @@ const userProjection = {
userId: 1,
},
},
user$ref: {
$entity: 'user',
email$user: {
$entity: 'email',
data: {
id: 1,
userState: 1,
refId: 1,
mobile$user: {
$entity: 'mobile',
data: {
id: 1,
mobile: 1,
userId: 1,
user: {
id: 1,
userState: 1,
refId: 1,
},
},
},
email: 1,
userId: 1,
},
},
loginName$user: {
$entity: 'loginName',
data: {
id: 1,
name: 1,
userId: 1,
},
},
// user$ref: {
// $entity: 'user',
// data: {
// id: 1,
// userState: 1,
// refId: 1,
// mobile$user: {
// $entity: 'mobile',
// data: {
// id: 1,
// mobile: 1,
// userId: 1,
// user: {
// id: 1,
// userState: 1,
// refId: 1,
// },
// },
// },
// },
// },
};
export const tokenProjection = {
id: 1,
@ -94,6 +111,28 @@ export const tokenProjection = {
refId: 1,
},
},
email: {
id: 1,
email: 1,
userId: 1,
ableState: 1,
user: {
id: 1,
userState: 1,
refId: 1,
},
},
loginName: {
id: 1,
name: 1,
userId: 1,
ableState: 1,
user: {
id: 1,
userState: 1,
refId: 1,
},
},
};
export const applicationProjection = {
id: 1,

View File

@ -1,2 +1,2 @@
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
declare const checkers: (import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "address", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "application", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "applicationPassport", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "token", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "user", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "mobile", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "message", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("../oak-app-domain").EntityDict, "parasite", import("..").RuntimeCxt<import("../oak-app-domain").EntityDict>>)[];
export default checkers;

View File

@ -93,6 +93,7 @@ class BackendRuntimeContext extends BackendRuntimeContext_1.BackendRuntimeContex
id: 1,
isRoot: 1,
},
playerId: 1,
},
filter: {
$or: [

View File

@ -15,6 +15,7 @@ export interface Schema extends User {
codes: Array<WechatQrCode>;
isRoot?: Boolean;
addresses?: Address[];
hasPassword?: Boolean;
}
export type IdAction = 'verify' | 'accept' | 'reject';
export type IdState = 'unverified' | 'verified' | 'verifying';

View File

@ -39,6 +39,7 @@ exports.entityDesc = {
codes: '微信分享二维码',
isRoot: '是否超级用户',
addresses: '收货地址',
hasPassword: '用户是否存在密码'
},
action: {
activate: '激活',

View File

@ -1,7 +1,13 @@
export declare const actionDefDict: {
log: {
iState: import("oak-domain/lib/types").ActionDef<string, string>;
};
modi: {
iState: import("oak-domain/lib/types").ActionDef<string, string>;
};
oper: {
iState: import("oak-domain/lib/types").ActionDef<string, string>;
};
captcha: {
iState: import("oak-domain/lib/types").ActionDef<string, string>;
};

View File

@ -1,37 +1,41 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.actionDefDict = void 0;
const Action_1 = require("./Modi/Action");
const Action_2 = require("./Captcha/Action");
const Action_3 = require("./Email/Action");
const Action_4 = require("./LoginName/Action");
const Action_5 = require("./Message/Action");
const Action_6 = require("./Mobile/Action");
const Action_7 = require("./Notification/Action");
const Action_8 = require("./Parasite/Action");
const Action_9 = require("./ToDo/Action");
const Action_10 = require("./Token/Action");
const Action_11 = require("./User/Action");
const Action_12 = require("./UserEntityGrant/Action");
const Action_13 = require("./UserWechatPublicTag/Action");
const Action_14 = require("./WechatLogin/Action");
const Action_15 = require("./WechatMenu/Action");
const Action_16 = require("./WechatPublicTag/Action");
const Action_1 = require("./Log/Action");
const Action_2 = require("./Modi/Action");
const Action_3 = require("./Oper/Action");
const Action_4 = require("./Captcha/Action");
const Action_5 = require("./Email/Action");
const Action_6 = require("./LoginName/Action");
const Action_7 = require("./Message/Action");
const Action_8 = require("./Mobile/Action");
const Action_9 = require("./Notification/Action");
const Action_10 = require("./Parasite/Action");
const Action_11 = require("./ToDo/Action");
const Action_12 = require("./Token/Action");
const Action_13 = require("./User/Action");
const Action_14 = require("./UserEntityGrant/Action");
const Action_15 = require("./UserWechatPublicTag/Action");
const Action_16 = require("./WechatLogin/Action");
const Action_17 = require("./WechatMenu/Action");
const Action_18 = require("./WechatPublicTag/Action");
exports.actionDefDict = {
modi: Action_1.actionDefDict,
captcha: Action_2.actionDefDict,
email: Action_3.actionDefDict,
loginName: Action_4.actionDefDict,
message: Action_5.actionDefDict,
mobile: Action_6.actionDefDict,
notification: Action_7.actionDefDict,
parasite: Action_8.actionDefDict,
toDo: Action_9.actionDefDict,
token: Action_10.actionDefDict,
user: Action_11.actionDefDict,
userEntityGrant: Action_12.actionDefDict,
userWechatPublicTag: Action_13.actionDefDict,
wechatLogin: Action_14.actionDefDict,
wechatMenu: Action_15.actionDefDict,
wechatPublicTag: Action_16.actionDefDict
log: Action_1.actionDefDict,
modi: Action_2.actionDefDict,
oper: Action_3.actionDefDict,
captcha: Action_4.actionDefDict,
email: Action_5.actionDefDict,
loginName: Action_6.actionDefDict,
message: Action_7.actionDefDict,
mobile: Action_8.actionDefDict,
notification: Action_9.actionDefDict,
parasite: Action_10.actionDefDict,
toDo: Action_11.actionDefDict,
token: Action_12.actionDefDict,
user: Action_13.actionDefDict,
userEntityGrant: Action_14.actionDefDict,
userWechatPublicTag: Action_15.actionDefDict,
wechatLogin: Action_16.actionDefDict,
wechatMenu: Action_17.actionDefDict,
wechatPublicTag: Action_18.actionDefDict
};

View File

@ -1,5 +1,6 @@
import { EntityDef as ActionAuth } from "./ActionAuth/Schema";
import { EntityDef as I18n } from "./I18n/Schema";
import { EntityDef as Log } from "./Log/Schema";
import { EntityDef as Modi } from "./Modi/Schema";
import { EntityDef as ModiEntity } from "./ModiEntity/Schema";
import { EntityDef as Oper } from "./Oper/Schema";
@ -58,6 +59,7 @@ import { EntityDef as WechatUser } from "./WechatUser/Schema";
export type EntityDict = {
actionAuth: ActionAuth;
i18n: I18n;
log: Log;
modi: Modi;
modiEntity: ModiEntity;
oper: Oper;

View File

@ -1,10 +1,11 @@
import { ForeignKey } from "oak-domain/lib/types/DataType";
import { Q_DateValue, Q_NumberValue, Q_StringValue, NodeId, MakeFilter, ExprOp, ExpressionKey, SubQueryPredicateMetadata } from "oak-domain/lib/types/Demand";
import { Q_DateValue, Q_NumberValue, Q_StringValue, Q_EnumValue, NodeId, MakeFilter, ExprOp, ExpressionKey, SubQueryPredicateMetadata } from "oak-domain/lib/types/Demand";
import { OneOf } from "oak-domain/lib/types/Polyfill";
import { FormCreateData, FormUpdateData, DeduceAggregation, Operation as OakOperation, Selection as OakSelection, MakeAction as OakMakeAction, AggregationResult, EntityShape } from "oak-domain/lib/types/Entity";
import { AppendOnlyAction } from "oak-domain/lib/actions/action";
import { Action, ParticularAction, IState } from "./Action";
import { String, Datetime } from "oak-domain/lib/types/DataType";
import * as User from "../User/Schema";
import * as Log from "../Log/Schema";
import * as OperEntity from "../OperEntity/Schema";
export type OpSchema = EntityShape & {
action: String<24>;
@ -14,6 +15,9 @@ export type OpSchema = EntityShape & {
operatorId?: ForeignKey<"user"> | null;
targetEntity: String<32>;
bornAt?: Datetime | null;
logId?: ForeignKey<"log"> | null;
undoData?: Object | null;
iState?: IState | null;
};
export type OpAttr = keyof OpSchema;
export type Schema = EntityShape & {
@ -24,7 +28,11 @@ export type Schema = EntityShape & {
operatorId?: ForeignKey<"user"> | null;
targetEntity: String<32>;
bornAt?: Datetime | null;
logId?: ForeignKey<"log"> | null;
undoData?: Object | null;
iState?: IState | null;
operator?: User.Schema | null;
log?: Log.Schema | null;
operEntity$oper?: Array<OperEntity.Schema>;
operEntity$oper$$aggr?: AggregationResult<OperEntity.Schema>;
} & {
@ -43,6 +51,10 @@ type AttrFilter = {
operator: User.Filter;
targetEntity: Q_StringValue;
bornAt: Q_DateValue;
logId: Q_StringValue;
log: Log.Filter;
undoData: Object;
iState: Q_EnumValue<IState>;
operEntity$oper: OperEntity.Filter & SubQueryPredicateMetadata;
};
export type Filter = MakeFilter<AttrFilter & ExprOp<OpAttr | string>>;
@ -61,6 +73,10 @@ export type Projection = {
operator?: User.Projection;
targetEntity?: number;
bornAt?: number;
logId?: number;
log?: Log.Projection;
undoData?: number | Object;
iState?: number;
operEntity$oper?: OperEntity.Selection & {
$entity: "operEntity";
};
@ -74,6 +90,9 @@ type OperIdProjection = OneOf<{
type UserIdProjection = OneOf<{
operatorId: number;
}>;
type LogIdProjection = OneOf<{
logId: number;
}>;
export type SortAttr = {
id: number;
} | {
@ -92,6 +111,12 @@ export type SortAttr = {
targetEntity: number;
} | {
bornAt: number;
} | {
logId: number;
} | {
log: Log.SortAttr;
} | {
iState: number;
} | {
[k: string]: any;
} | OneOf<ExprOp<OpAttr | string>>;
@ -103,7 +128,7 @@ export type Sorter = SortNode[];
export type SelectOperation<P extends Object = Projection> = OakSelection<"select", P, Filter, Sorter>;
export type Selection<P extends Object = Projection> = SelectOperation<P>;
export type Aggregation = DeduceAggregation<Projection, Filter, Sorter>;
export type CreateOperationData = FormCreateData<Omit<OpSchema, "operatorId">> & (({
export type CreateOperationData = FormCreateData<Omit<OpSchema, "operatorId" | "logId">> & (({
operatorId?: never;
operator?: User.CreateSingleOperation;
} | {
@ -112,13 +137,22 @@ export type CreateOperationData = FormCreateData<Omit<OpSchema, "operatorId">> &
} | {
operator?: never;
operatorId?: ForeignKey<"operator">;
}) & ({
logId?: never;
log?: Log.CreateSingleOperation;
} | {
logId: ForeignKey<"log">;
log?: Log.UpdateOperation;
} | {
log?: never;
logId?: ForeignKey<"log">;
})) & {
operEntity$oper?: OakOperation<"create", Omit<OperEntity.CreateOperationData, "oper" | "operId">[]> | Array<OakOperation<"create", Omit<OperEntity.CreateOperationData, "oper" | "operId">>>;
};
export type CreateSingleOperation = OakOperation<"create", CreateOperationData>;
export type CreateMultipleOperation = OakOperation<"create", Array<CreateOperationData>>;
export type CreateOperation = CreateSingleOperation | CreateMultipleOperation;
export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "operatorId">> & (({
export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "operatorId" | "logId">> & (({
operator?: User.CreateSingleOperation;
operatorId?: never;
} | {
@ -130,22 +164,37 @@ export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "operatorId">> &
} | {
operator?: never;
operatorId?: ForeignKey<"operator"> | null;
}) & ({
log?: Log.CreateSingleOperation;
logId?: never;
} | {
log?: Log.UpdateOperation;
logId?: never;
} | {
log?: Log.RemoveOperation;
logId?: never;
} | {
log?: never;
logId?: ForeignKey<"log"> | null;
})) & {
[k: string]: any;
operEntity$oper?: OakOperation<"create", Omit<OperEntity.CreateOperationData, "oper" | "operId">[]> | Array<OakOperation<"create", Omit<OperEntity.CreateOperationData, "oper" | "operId">>>;
};
export type UpdateOperation = OakOperation<"update" | string, UpdateOperationData, Filter, Sorter>;
export type UpdateOperation = OakOperation<"update" | ParticularAction | string, UpdateOperationData, Filter, Sorter>;
export type RemoveOperationData = {} & (({
operator?: User.UpdateOperation | User.RemoveOperation;
}) & ({
log?: Log.UpdateOperation | Log.RemoveOperation;
}));
export type RemoveOperation = OakOperation<"remove", RemoveOperationData, Filter, Sorter>;
export type Operation = CreateOperation | UpdateOperation | RemoveOperation;
export type UserIdSubQuery = Selection<UserIdProjection>;
export type LogIdSubQuery = Selection<LogIdProjection>;
export type OperIdSubQuery = Selection<OperIdProjection>;
export type EntityDef = {
Schema: Schema;
OpSchema: OpSchema;
Action: OakMakeAction<AppendOnlyAction> | string;
Action: OakMakeAction<Action> | string;
Selection: Selection;
Aggregation: Aggregation;
Operation: Operation;
@ -154,5 +203,6 @@ export type EntityDef = {
Remove: RemoveOperation;
CreateSingle: CreateSingleOperation;
CreateMulti: CreateMultipleOperation;
ParticularAction: ParticularAction;
};
export {};

View File

@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.desc = void 0;
const action_1 = require("oak-domain/lib/actions/action");
const Action_1 = require("./Action");
exports.desc = {
attributes: {
action: {
@ -34,10 +34,21 @@ exports.desc = {
},
bornAt: {
type: "datetime"
},
logId: {
type: "ref",
ref: "log"
},
undoData: {
type: "object"
},
iState: {
type: "enum",
enumeration: ["normal", "rollbacked"]
}
},
actionType: "appendOnly",
actions: action_1.appendOnlyActions,
actionType: "crud",
actions: Action_1.actions,
indexes: [
{
name: 'index_bornAt_operatorId',

View File

@ -186,6 +186,9 @@ export type Aggregation = DeduceAggregation<Projection, Filter, Sorter>;
export type CreateOperationData = FormCreateData<Omit<OpSchema, "entity" | "entityId" | "operId">> & (({
operId?: never;
oper: Oper.CreateSingleOperation;
} | {
operId: ForeignKey<"oper">;
oper?: Oper.UpdateOperation;
} | {
oper?: never;
operId: ForeignKey<"oper">;
@ -344,6 +347,12 @@ export type CreateOperation = CreateSingleOperation | CreateMultipleOperation;
export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "entity" | "entityId" | "operId">> & (({
oper?: Oper.CreateSingleOperation;
operId?: never;
} | {
oper?: Oper.UpdateOperation;
operId?: never;
} | {
oper?: Oper.RemoveOperation;
operId?: never;
} | {
oper?: never;
operId?: ForeignKey<"oper">;
@ -414,7 +423,9 @@ export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "entity" | "enti
[k: string]: any;
};
export type UpdateOperation = OakOperation<"update" | string, UpdateOperationData, Filter, Sorter>;
export type RemoveOperationData = {} & ({
export type RemoveOperationData = {} & (({
oper?: Oper.UpdateOperation | Oper.RemoveOperation;
})) & ({
user?: User.UpdateOperation | User.RemoveOperation;
} | {
userEntityGrant?: UserEntityGrant.UpdateOperation | UserEntityGrant.RemoveOperation;

View File

@ -3,117 +3,119 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.storageSchema = void 0;
const Storage_1 = require("./ActionAuth/Storage");
const Storage_2 = require("./I18n/Storage");
const Storage_3 = require("./Modi/Storage");
const Storage_4 = require("./ModiEntity/Storage");
const Storage_5 = require("./Oper/Storage");
const Storage_6 = require("./OperEntity/Storage");
const Storage_7 = require("./Path/Storage");
const Storage_8 = require("./Relation/Storage");
const Storage_9 = require("./RelationAuth/Storage");
const Storage_10 = require("./User/Storage");
const Storage_11 = require("./UserEntityClaim/Storage");
const Storage_12 = require("./UserEntityGrant/Storage");
const Storage_13 = require("./UserRelation/Storage");
const Storage_14 = require("./Address/Storage");
const Storage_15 = require("./Application/Storage");
const Storage_16 = require("./ApplicationPassport/Storage");
const Storage_17 = require("./Area/Storage");
const Storage_18 = require("./Article/Storage");
const Storage_19 = require("./ArticleMenu/Storage");
const Storage_20 = require("./Captcha/Storage");
const Storage_21 = require("./ChangePasswordTemp/Storage");
const Storage_22 = require("./Domain/Storage");
const Storage_23 = require("./Email/Storage");
const Storage_24 = require("./ExtraFile/Storage");
const Storage_25 = require("./Livestream/Storage");
const Storage_26 = require("./LoginName/Storage");
const Storage_27 = require("./Message/Storage");
const Storage_28 = require("./MessageSystem/Storage");
const Storage_29 = require("./MessageType/Storage");
const Storage_30 = require("./MessageTypeSmsTemplate/Storage");
const Storage_31 = require("./MessageTypeTemplate/Storage");
const Storage_32 = require("./Mobile/Storage");
const Storage_33 = require("./Notification/Storage");
const Storage_34 = require("./Parasite/Storage");
const Storage_35 = require("./Passport/Storage");
const Storage_36 = require("./Platform/Storage");
const Storage_37 = require("./ReadRemark/Storage");
const Storage_38 = require("./Session/Storage");
const Storage_39 = require("./SessionMessage/Storage");
const Storage_40 = require("./SmsTemplate/Storage");
const Storage_41 = require("./Station/Storage");
const Storage_42 = require("./Subscription/Storage");
const Storage_43 = require("./Subway/Storage");
const Storage_44 = require("./SubwayStation/Storage");
const Storage_45 = require("./System/Storage");
const Storage_46 = require("./ToDo/Storage");
const Storage_47 = require("./Token/Storage");
const Storage_48 = require("./UserSystem/Storage");
const Storage_49 = require("./UserWechatPublicTag/Storage");
const Storage_50 = require("./WechatLogin/Storage");
const Storage_51 = require("./WechatMenu/Storage");
const Storage_52 = require("./WechatMpJump/Storage");
const Storage_53 = require("./WechatPublicAutoReply/Storage");
const Storage_54 = require("./WechatPublicTag/Storage");
const Storage_55 = require("./WechatQrCode/Storage");
const Storage_56 = require("./WechatTemplate/Storage");
const Storage_57 = require("./WechatUser/Storage");
const Storage_3 = require("./Log/Storage");
const Storage_4 = require("./Modi/Storage");
const Storage_5 = require("./ModiEntity/Storage");
const Storage_6 = require("./Oper/Storage");
const Storage_7 = require("./OperEntity/Storage");
const Storage_8 = require("./Path/Storage");
const Storage_9 = require("./Relation/Storage");
const Storage_10 = require("./RelationAuth/Storage");
const Storage_11 = require("./User/Storage");
const Storage_12 = require("./UserEntityClaim/Storage");
const Storage_13 = require("./UserEntityGrant/Storage");
const Storage_14 = require("./UserRelation/Storage");
const Storage_15 = require("./Address/Storage");
const Storage_16 = require("./Application/Storage");
const Storage_17 = require("./ApplicationPassport/Storage");
const Storage_18 = require("./Area/Storage");
const Storage_19 = require("./Article/Storage");
const Storage_20 = require("./ArticleMenu/Storage");
const Storage_21 = require("./Captcha/Storage");
const Storage_22 = require("./ChangePasswordTemp/Storage");
const Storage_23 = require("./Domain/Storage");
const Storage_24 = require("./Email/Storage");
const Storage_25 = require("./ExtraFile/Storage");
const Storage_26 = require("./Livestream/Storage");
const Storage_27 = require("./LoginName/Storage");
const Storage_28 = require("./Message/Storage");
const Storage_29 = require("./MessageSystem/Storage");
const Storage_30 = require("./MessageType/Storage");
const Storage_31 = require("./MessageTypeSmsTemplate/Storage");
const Storage_32 = require("./MessageTypeTemplate/Storage");
const Storage_33 = require("./Mobile/Storage");
const Storage_34 = require("./Notification/Storage");
const Storage_35 = require("./Parasite/Storage");
const Storage_36 = require("./Passport/Storage");
const Storage_37 = require("./Platform/Storage");
const Storage_38 = require("./ReadRemark/Storage");
const Storage_39 = require("./Session/Storage");
const Storage_40 = require("./SessionMessage/Storage");
const Storage_41 = require("./SmsTemplate/Storage");
const Storage_42 = require("./Station/Storage");
const Storage_43 = require("./Subscription/Storage");
const Storage_44 = require("./Subway/Storage");
const Storage_45 = require("./SubwayStation/Storage");
const Storage_46 = require("./System/Storage");
const Storage_47 = require("./ToDo/Storage");
const Storage_48 = require("./Token/Storage");
const Storage_49 = require("./UserSystem/Storage");
const Storage_50 = require("./UserWechatPublicTag/Storage");
const Storage_51 = require("./WechatLogin/Storage");
const Storage_52 = require("./WechatMenu/Storage");
const Storage_53 = require("./WechatMpJump/Storage");
const Storage_54 = require("./WechatPublicAutoReply/Storage");
const Storage_55 = require("./WechatPublicTag/Storage");
const Storage_56 = require("./WechatQrCode/Storage");
const Storage_57 = require("./WechatTemplate/Storage");
const Storage_58 = require("./WechatUser/Storage");
exports.storageSchema = {
actionAuth: Storage_1.desc,
i18n: Storage_2.desc,
modi: Storage_3.desc,
modiEntity: Storage_4.desc,
oper: Storage_5.desc,
operEntity: Storage_6.desc,
path: Storage_7.desc,
relation: Storage_8.desc,
relationAuth: Storage_9.desc,
user: Storage_10.desc,
userEntityClaim: Storage_11.desc,
userEntityGrant: Storage_12.desc,
userRelation: Storage_13.desc,
address: Storage_14.desc,
application: Storage_15.desc,
applicationPassport: Storage_16.desc,
area: Storage_17.desc,
article: Storage_18.desc,
articleMenu: Storage_19.desc,
captcha: Storage_20.desc,
changePasswordTemp: Storage_21.desc,
domain: Storage_22.desc,
email: Storage_23.desc,
extraFile: Storage_24.desc,
livestream: Storage_25.desc,
loginName: Storage_26.desc,
message: Storage_27.desc,
messageSystem: Storage_28.desc,
messageType: Storage_29.desc,
messageTypeSmsTemplate: Storage_30.desc,
messageTypeTemplate: Storage_31.desc,
mobile: Storage_32.desc,
notification: Storage_33.desc,
parasite: Storage_34.desc,
passport: Storage_35.desc,
platform: Storage_36.desc,
readRemark: Storage_37.desc,
session: Storage_38.desc,
sessionMessage: Storage_39.desc,
smsTemplate: Storage_40.desc,
station: Storage_41.desc,
subscription: Storage_42.desc,
subway: Storage_43.desc,
subwayStation: Storage_44.desc,
system: Storage_45.desc,
toDo: Storage_46.desc,
token: Storage_47.desc,
userSystem: Storage_48.desc,
userWechatPublicTag: Storage_49.desc,
wechatLogin: Storage_50.desc,
wechatMenu: Storage_51.desc,
wechatMpJump: Storage_52.desc,
wechatPublicAutoReply: Storage_53.desc,
wechatPublicTag: Storage_54.desc,
wechatQrCode: Storage_55.desc,
wechatTemplate: Storage_56.desc,
wechatUser: Storage_57.desc
log: Storage_3.desc,
modi: Storage_4.desc,
modiEntity: Storage_5.desc,
oper: Storage_6.desc,
operEntity: Storage_7.desc,
path: Storage_8.desc,
relation: Storage_9.desc,
relationAuth: Storage_10.desc,
user: Storage_11.desc,
userEntityClaim: Storage_12.desc,
userEntityGrant: Storage_13.desc,
userRelation: Storage_14.desc,
address: Storage_15.desc,
application: Storage_16.desc,
applicationPassport: Storage_17.desc,
area: Storage_18.desc,
article: Storage_19.desc,
articleMenu: Storage_20.desc,
captcha: Storage_21.desc,
changePasswordTemp: Storage_22.desc,
domain: Storage_23.desc,
email: Storage_24.desc,
extraFile: Storage_25.desc,
livestream: Storage_26.desc,
loginName: Storage_27.desc,
message: Storage_28.desc,
messageSystem: Storage_29.desc,
messageType: Storage_30.desc,
messageTypeSmsTemplate: Storage_31.desc,
messageTypeTemplate: Storage_32.desc,
mobile: Storage_33.desc,
notification: Storage_34.desc,
parasite: Storage_35.desc,
passport: Storage_36.desc,
platform: Storage_37.desc,
readRemark: Storage_38.desc,
session: Storage_39.desc,
sessionMessage: Storage_40.desc,
smsTemplate: Storage_41.desc,
station: Storage_42.desc,
subscription: Storage_43.desc,
subway: Storage_44.desc,
subwayStation: Storage_45.desc,
system: Storage_46.desc,
toDo: Storage_47.desc,
token: Storage_48.desc,
userSystem: Storage_49.desc,
userWechatPublicTag: Storage_50.desc,
wechatLogin: Storage_51.desc,
wechatMenu: Storage_52.desc,
wechatMpJump: Storage_53.desc,
wechatPublicAutoReply: Storage_54.desc,
wechatPublicTag: Storage_55.desc,
wechatQrCode: Storage_56.desc,
wechatTemplate: Storage_57.desc,
wechatUser: Storage_58.desc
};

View File

@ -1,57 +1,61 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.styleDict = void 0;
const Style_1 = require("./Modi/Style");
const Style_2 = require("./Application/Style");
const Style_3 = require("./Area/Style");
const Style_4 = require("./Captcha/Style");
const Style_5 = require("./ChangePasswordTemp/Style");
const Style_6 = require("./Domain/Style");
const Style_7 = require("./Email/Style");
const Style_8 = require("./ExtraFile/Style");
const Style_9 = require("./Livestream/Style");
const Style_10 = require("./LoginName/Style");
const Style_11 = require("./Message/Style");
const Style_12 = require("./Mobile/Style");
const Style_13 = require("./Notification/Style");
const Style_14 = require("./Parasite/Style");
const Style_15 = require("./Passport/Style");
const Style_16 = require("./SmsTemplate/Style");
const Style_17 = require("./ToDo/Style");
const Style_18 = require("./Token/Style");
const Style_19 = require("./User/Style");
const Style_20 = require("./UserEntityGrant/Style");
const Style_21 = require("./UserWechatPublicTag/Style");
const Style_22 = require("./WechatLogin/Style");
const Style_23 = require("./WechatMenu/Style");
const Style_24 = require("./WechatPublicTag/Style");
const Style_25 = require("./WechatQrCode/Style");
const Style_26 = require("./WechatUser/Style");
const Style_1 = require("./Log/Style");
const Style_2 = require("./Modi/Style");
const Style_3 = require("./Oper/Style");
const Style_4 = require("./Application/Style");
const Style_5 = require("./Area/Style");
const Style_6 = require("./Captcha/Style");
const Style_7 = require("./ChangePasswordTemp/Style");
const Style_8 = require("./Domain/Style");
const Style_9 = require("./Email/Style");
const Style_10 = require("./ExtraFile/Style");
const Style_11 = require("./Livestream/Style");
const Style_12 = require("./LoginName/Style");
const Style_13 = require("./Message/Style");
const Style_14 = require("./Mobile/Style");
const Style_15 = require("./Notification/Style");
const Style_16 = require("./Parasite/Style");
const Style_17 = require("./Passport/Style");
const Style_18 = require("./SmsTemplate/Style");
const Style_19 = require("./ToDo/Style");
const Style_20 = require("./Token/Style");
const Style_21 = require("./User/Style");
const Style_22 = require("./UserEntityGrant/Style");
const Style_23 = require("./UserWechatPublicTag/Style");
const Style_24 = require("./WechatLogin/Style");
const Style_25 = require("./WechatMenu/Style");
const Style_26 = require("./WechatPublicTag/Style");
const Style_27 = require("./WechatQrCode/Style");
const Style_28 = require("./WechatUser/Style");
exports.styleDict = {
modi: Style_1.style,
application: Style_2.style,
area: Style_3.style,
captcha: Style_4.style,
changePasswordTemp: Style_5.style,
domain: Style_6.style,
email: Style_7.style,
extraFile: Style_8.style,
livestream: Style_9.style,
loginName: Style_10.style,
message: Style_11.style,
mobile: Style_12.style,
notification: Style_13.style,
parasite: Style_14.style,
passport: Style_15.style,
smsTemplate: Style_16.style,
toDo: Style_17.style,
token: Style_18.style,
user: Style_19.style,
userEntityGrant: Style_20.style,
userWechatPublicTag: Style_21.style,
wechatLogin: Style_22.style,
wechatMenu: Style_23.style,
wechatPublicTag: Style_24.style,
wechatQrCode: Style_25.style,
wechatUser: Style_26.style
log: Style_1.style,
modi: Style_2.style,
oper: Style_3.style,
application: Style_4.style,
area: Style_5.style,
captcha: Style_6.style,
changePasswordTemp: Style_7.style,
domain: Style_8.style,
email: Style_9.style,
extraFile: Style_10.style,
livestream: Style_11.style,
loginName: Style_12.style,
message: Style_13.style,
mobile: Style_14.style,
notification: Style_15.style,
parasite: Style_16.style,
passport: Style_17.style,
smsTemplate: Style_18.style,
toDo: Style_19.style,
token: Style_20.style,
user: Style_21.style,
userEntityGrant: Style_22.style,
userWechatPublicTag: Style_23.style,
wechatLogin: Style_24.style,
wechatMenu: Style_25.style,
wechatPublicTag: Style_26.style,
wechatQrCode: Style_27.style,
wechatUser: Style_28.style
};

View File

@ -38,6 +38,7 @@ export type OpSchema = EntityShape & {
idCardType?: ("ID-Card" | "passport" | "Mainland-passport") | null;
idNumber?: String<32> | null;
isRoot?: Boolean | null;
hasPassword?: Boolean | null;
idState?: IdState | null;
userState?: UserState | null;
};
@ -53,6 +54,7 @@ export type Schema = EntityShape & {
idCardType?: ("ID-Card" | "passport" | "Mainland-passport") | null;
idNumber?: String<32> | null;
isRoot?: Boolean | null;
hasPassword?: Boolean | null;
idState?: IdState | null;
userState?: UserState | null;
ref?: Schema | null;
@ -123,6 +125,7 @@ type AttrFilter = {
idCardType: Q_EnumValue<"ID-Card" | "passport" | "Mainland-passport">;
idNumber: Q_StringValue;
isRoot: Q_BooleanValue;
hasPassword: Q_BooleanValue;
idState: Q_EnumValue<IdState>;
userState: Q_EnumValue<UserState>;
oper$operator: Oper.Filter & SubQueryPredicateMetadata;
@ -169,6 +172,7 @@ export type Projection = {
idCardType?: number;
idNumber?: number;
isRoot?: number;
hasPassword?: number;
idState?: number;
userState?: number;
oper$operator?: Oper.Selection & {
@ -350,6 +354,8 @@ export type SortAttr = {
idNumber: number;
} | {
isRoot: number;
} | {
hasPassword: number;
} | {
idState: number;
} | {
@ -375,7 +381,7 @@ export type CreateOperationData = FormCreateData<Omit<OpSchema, "refId">> & (({
ref?: never;
refId?: ForeignKey<"ref">;
})) & {
oper$operator?: OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">[]> | Array<OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">>>;
oper$operator?: OakOperation<Oper.UpdateOperation["action"], Omit<Oper.UpdateOperationData, "operator" | "operatorId">, Omit<Oper.Filter, "operator" | "operatorId">> | OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">[]> | Array<OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">> | OakOperation<Oper.UpdateOperation["action"], Omit<Oper.UpdateOperationData, "operator" | "operatorId">, Omit<Oper.Filter, "operator" | "operatorId">>>;
user$ref?: OakOperation<UpdateOperation["action"], Omit<UpdateOperationData, "ref" | "refId">, Omit<Filter, "ref" | "refId">> | OakOperation<"create", Omit<CreateOperationData, "ref" | "refId">[]> | Array<OakOperation<"create", Omit<CreateOperationData, "ref" | "refId">> | OakOperation<UpdateOperation["action"], Omit<UpdateOperationData, "ref" | "refId">, Omit<Filter, "ref" | "refId">>>;
userEntityClaim$user?: OakOperation<UserEntityClaim.UpdateOperation["action"], Omit<UserEntityClaim.UpdateOperationData, "user" | "userId">, Omit<UserEntityClaim.Filter, "user" | "userId">> | OakOperation<"create", Omit<UserEntityClaim.CreateOperationData, "user" | "userId">[]> | Array<OakOperation<"create", Omit<UserEntityClaim.CreateOperationData, "user" | "userId">> | OakOperation<UserEntityClaim.UpdateOperation["action"], Omit<UserEntityClaim.UpdateOperationData, "user" | "userId">, Omit<UserEntityClaim.Filter, "user" | "userId">>>;
userRelation$user?: OakOperation<UserRelation.UpdateOperation["action"], Omit<UserRelation.UpdateOperationData, "user" | "userId">, Omit<UserRelation.Filter, "user" | "userId">> | OakOperation<"create", Omit<UserRelation.CreateOperationData, "user" | "userId">[]> | Array<OakOperation<"create", Omit<UserRelation.CreateOperationData, "user" | "userId">> | OakOperation<UserRelation.UpdateOperation["action"], Omit<UserRelation.UpdateOperationData, "user" | "userId">, Omit<UserRelation.Filter, "user" | "userId">>>;
@ -417,7 +423,7 @@ export type UpdateOperationData = FormUpdateData<Omit<OpSchema, "refId">> & (({
refId?: ForeignKey<"ref"> | null;
})) & {
[k: string]: any;
oper$operator?: OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">[]> | Array<OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">>>;
oper$operator?: OakOperation<Oper.UpdateOperation["action"], Omit<Oper.UpdateOperationData, "operator" | "operatorId">, Omit<Oper.Filter, "operator" | "operatorId">> | OakOperation<Oper.RemoveOperation["action"], Omit<Oper.RemoveOperationData, "operator" | "operatorId">, Omit<Oper.Filter, "operator" | "operatorId">> | OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">[]> | Array<OakOperation<"create", Omit<Oper.CreateOperationData, "operator" | "operatorId">> | OakOperation<Oper.UpdateOperation["action"], Omit<Oper.UpdateOperationData, "operator" | "operatorId">, Omit<Oper.Filter, "operator" | "operatorId">> | OakOperation<Oper.RemoveOperation["action"], Omit<Oper.RemoveOperationData, "operator" | "operatorId">, Omit<Oper.Filter, "operator" | "operatorId">>>;
user$ref?: OakOperation<UpdateOperation["action"], Omit<UpdateOperationData, "ref" | "refId">, Omit<Filter, "ref" | "refId">> | OakOperation<RemoveOperation["action"], Omit<RemoveOperationData, "ref" | "refId">, Omit<Filter, "ref" | "refId">> | OakOperation<"create", Omit<CreateOperationData, "ref" | "refId">[]> | Array<OakOperation<"create", Omit<CreateOperationData, "ref" | "refId">> | OakOperation<UpdateOperation["action"], Omit<UpdateOperationData, "ref" | "refId">, Omit<Filter, "ref" | "refId">> | OakOperation<RemoveOperation["action"], Omit<RemoveOperationData, "ref" | "refId">, Omit<Filter, "ref" | "refId">>>;
userEntityClaim$user?: OakOperation<UserEntityClaim.UpdateOperation["action"], Omit<UserEntityClaim.UpdateOperationData, "user" | "userId">, Omit<UserEntityClaim.Filter, "user" | "userId">> | OakOperation<UserEntityClaim.RemoveOperation["action"], Omit<UserEntityClaim.RemoveOperationData, "user" | "userId">, Omit<UserEntityClaim.Filter, "user" | "userId">> | OakOperation<"create", Omit<UserEntityClaim.CreateOperationData, "user" | "userId">[]> | Array<OakOperation<"create", Omit<UserEntityClaim.CreateOperationData, "user" | "userId">> | OakOperation<UserEntityClaim.UpdateOperation["action"], Omit<UserEntityClaim.UpdateOperationData, "user" | "userId">, Omit<UserEntityClaim.Filter, "user" | "userId">> | OakOperation<UserEntityClaim.RemoveOperation["action"], Omit<UserEntityClaim.RemoveOperationData, "user" | "userId">, Omit<UserEntityClaim.Filter, "user" | "userId">>>;
userRelation$user?: OakOperation<UserRelation.UpdateOperation["action"], Omit<UserRelation.UpdateOperationData, "user" | "userId">, Omit<UserRelation.Filter, "user" | "userId">> | OakOperation<UserRelation.RemoveOperation["action"], Omit<UserRelation.RemoveOperationData, "user" | "userId">, Omit<UserRelation.Filter, "user" | "userId">> | OakOperation<"create", Omit<UserRelation.CreateOperationData, "user" | "userId">[]> | Array<OakOperation<"create", Omit<UserRelation.CreateOperationData, "user" | "userId">> | OakOperation<UserRelation.UpdateOperation["action"], Omit<UserRelation.UpdateOperationData, "user" | "userId">, Omit<UserRelation.Filter, "user" | "userId">> | OakOperation<UserRelation.RemoveOperation["action"], Omit<UserRelation.RemoveOperationData, "user" | "userId">, Omit<UserRelation.Filter, "user" | "userId">>>;

View File

@ -46,6 +46,9 @@ exports.desc = {
isRoot: {
type: "boolean"
},
hasPassword: {
type: "boolean"
},
idState: {
type: "enum",
enumeration: ["unverified", "verified", "verifying"]

View File

@ -1 +1 @@
{ "name": "用户", "attr": { "name": "姓名", "nickname": "昵称", "birth": "生日", "password": "密码", "passwordSha1": "sha1加密密码", "gender": "性别", "idCardType": "证件类型", "idNumber": "证件号码", "ref": "指向用户", "files": "相关文件", "userState": "用户状态", "idState": "认证状态", "codes": "微信分享二维码", "isRoot": "是否超级用户", "addresses": "收货地址" }, "action": { "activate": "激活", "accept": "同意", "verify": "认证", "reject": "拒绝", "enable": "启用", "disable": "禁用", "mergeTo": "合并", "mergeFrom": "使合并" }, "v": { "userState": { "shadow": "未激活", "normal": "正常", "disabled": "禁用", "merged": "已被合并" }, "idState": { "unverified": "未认证", "verifying": "认证中", "verified": "已认证" }, "gender": { "male": "男", "female": "女" }, "idCardType": { "ID-Card": "身份证", "passport": "护照", "Mainland-passport": "港澳台通行证" } } }
{ "name": "用户", "attr": { "name": "姓名", "nickname": "昵称", "birth": "生日", "password": "密码", "passwordSha1": "sha1加密密码", "gender": "性别", "idCardType": "证件类型", "idNumber": "证件号码", "ref": "指向用户", "files": "相关文件", "userState": "用户状态", "idState": "认证状态", "codes": "微信分享二维码", "isRoot": "是否超级用户", "addresses": "收货地址", "hasPassword": "用户是否存在密码" }, "action": { "activate": "激活", "accept": "同意", "verify": "认证", "reject": "拒绝", "enable": "启用", "disable": "禁用", "mergeTo": "合并", "mergeFrom": "使合并" }, "v": { "userState": { "shadow": "未激活", "normal": "正常", "disabled": "禁用", "merged": "已被合并" }, "idState": { "unverified": "未认证", "verifying": "认证中", "verified": "已认证" }, "gender": { "male": "男", "female": "女" }, "idCardType": { "ID-Card": "身份证", "passport": "护照", "Mainland-passport": "港澳台通行证" } } }

View File

@ -1,5 +1,6 @@
import * as ActionAuth from "./ActionAuth/Schema";
import * as I18n from "./I18n/Schema";
import * as Log from "./Log/Schema";
import * as Modi from "./Modi/Schema";
import * as ModiEntity from "./ModiEntity/Schema";
import * as Oper from "./Oper/Schema";
@ -65,6 +66,13 @@ export type I18nIdSubQuery = {
entity: "i18n";
}) | any;
};
export type LogIdSubQuery = {
[K in "$in" | "$nin"]?: (Oper.LogIdSubQuery & {
entity: "oper";
}) | (Log.LogIdSubQuery & {
entity: "log";
}) | any;
};
export type ModiIdSubQuery = {
[K in "$in" | "$nin"]?: (ModiEntity.ModiIdSubQuery & {
entity: "modiEntity";

View File

@ -1,2 +1,2 @@
declare const _default: (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, "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, "message", 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, "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, "parasite", 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, "sessionMessage", 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, "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, "application", 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, "sessionMessage", 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>>)[];
export default _default;

View File

@ -14,7 +14,7 @@ export declare function createToDo<ED extends EntityDict & BaseEntityDict, T ext
redirectTo: EntityDict['toDo']['OpSchema']['redirectTo'];
entity: any;
entityId: string;
}, userIds?: string[]): Promise<0 | 1>;
}, userIds?: string[]): Promise<1 | 0>;
/**
* todo例程entity对象上进行action操作时filtertodo完成
* entity的action的后trigger中调用

View File

@ -21,6 +21,9 @@ const triggers = [
if (!userData.nickname) {
userData.nickname = (0, randomUser_1.randomName)('user_', 8);
}
if (userData.password || userData.passwordSha1) {
userData.hasPassword = true;
}
userData.userSystem$user = [
{
id: await (0, uuid_1.generateNewIdAsync)(),
@ -43,6 +46,29 @@ const triggers = [
return 1;
},
},
{
name: '当用户更新信息带有密码时将hasPassword附上true',
entity: 'user',
action: 'update',
when: 'before',
fn: async ({ operation }, context) => {
const { data, filter } = operation;
const setData = async (userData) => {
if (userData.password || userData.passwordSha1) {
userData.hasPassword = true;
}
};
if (data instanceof Array) {
for (const item of data) {
await setData(item);
}
}
else {
await setData(data);
}
return 1;
},
},
{
name: '系统生成的第一个用户默认注册为root用户的初始状态默认为shadow',
entity: 'user',

View File

@ -11,6 +11,7 @@ const userProjection = {
gender: 1,
birth: 1,
isRoot: 1,
hasPassword: 1,
extraFile$entity: {
$entity: 'extraFile',
data: {
@ -40,27 +41,43 @@ const userProjection = {
userId: 1,
},
},
user$ref: {
$entity: 'user',
email$user: {
$entity: 'email',
data: {
id: 1,
userState: 1,
refId: 1,
mobile$user: {
$entity: 'mobile',
data: {
id: 1,
mobile: 1,
userId: 1,
user: {
id: 1,
userState: 1,
refId: 1,
},
},
},
email: 1,
userId: 1,
},
},
loginName$user: {
$entity: 'loginName',
data: {
id: 1,
name: 1,
userId: 1,
},
},
// user$ref: {
// $entity: 'user',
// data: {
// id: 1,
// userState: 1,
// refId: 1,
// mobile$user: {
// $entity: 'mobile',
// data: {
// id: 1,
// mobile: 1,
// userId: 1,
// user: {
// id: 1,
// userState: 1,
// refId: 1,
// },
// },
// },
// },
// },
};
exports.tokenProjection = {
id: 1,
@ -97,6 +114,28 @@ exports.tokenProjection = {
refId: 1,
},
},
email: {
id: 1,
email: 1,
userId: 1,
ableState: 1,
user: {
id: 1,
userState: 1,
refId: 1,
},
},
loginName: {
id: 1,
name: 1,
userId: 1,
ableState: 1,
user: {
id: 1,
userState: 1,
refId: 1,
},
},
};
exports.applicationProjection = {
id: 1,

View File

@ -1,6 +1,6 @@
{
"name": "oak-general-business",
"version": "5.4.1",
"version": "5.5.0",
"description": "oak框架中公共业务逻辑的实现",
"author": {
"name": "XuChang"
@ -24,10 +24,10 @@
"csstype": "^3.1.3",
"dayjs": "^1.11.9",
"nodemailer": "^6.9.14",
"oak-common-aspect": "^3.0.1",
"oak-domain": "^5.1.0",
"oak-common-aspect": "^3.0.2",
"oak-domain": "^5.1.1",
"oak-external-sdk": "^2.3.3",
"oak-frontend-base": "^5.3.6",
"oak-frontend-base": "^5.3.8",
"qrcode.react": "^3.1.0",
"react-dnd": "^16.0.1",
"react-dnd-html5-backend": "^16.0.1",

View File

@ -75,18 +75,10 @@ export default OakComponent({
/**
* tab
*/
onTapItem(e: { currentTarget: { dataset: { index: any } } }) {
onTapItem(e: { currentTarget: { dataset: { index: number } } }) {
const index = e.currentTarget.dataset.index;
const url = this.props.list![index].pagePath;
this.triggerEvent('oaktap', {
index,
item: this.props.list![index],
});
if (!url) {
return;
}
// 切换路由
this.switchTab({
url,

View File

@ -115,6 +115,7 @@ export abstract class BackendRuntimeContext<ED extends EntityDict & BaseEntityDi
id: 1,
isRoot: 1,
},
playerId: 1,
},
filter: {
$or: [

View File

@ -17,6 +17,7 @@ export interface Schema extends User {
codes: Array<WechatQrCode>;
isRoot?: Boolean;
addresses?: Address[];
hasPassword?: Boolean;
};
export type IdAction = 'verify' | 'accept' | 'reject';
@ -74,6 +75,7 @@ export const entityDesc: EntityDesc<
codes: '微信分享二维码',
isRoot: '是否超级用户',
addresses: '收货地址',
hasPassword: '用户是否存在密码'
},
action: {
activate: '激活',

View File

@ -1,7 +1,7 @@
import { generateNewIdAsync } from 'oak-domain/lib/utils/uuid';
import { CreateTrigger, Trigger } from 'oak-domain/lib/types/Trigger';
import { EntityDict } from '../oak-app-domain/EntityDict';
import { CreateOperationData as CreateUserData } from '../oak-app-domain/User/Schema';
import { CreateOperationData as CreateUserData, UpdateOperationData as UpdateUserData } from '../oak-app-domain/User/Schema';
import { ROOT_USER_ID } from '../constants';
import { randomName } from '../utils/randomUser';
import { BRC } from '../types/RuntimeCxt';
@ -24,6 +24,9 @@ const triggers: Trigger<EntityDict, 'user', BRC<EntityDict>>[] = [
if (!userData.nickname) {
userData.nickname = randomName('user_', 8);
}
if (userData.password || userData.passwordSha1) {
userData.hasPassword = true;
}
userData.userSystem$user = [
{
id: await generateNewIdAsync(),
@ -45,6 +48,30 @@ const triggers: Trigger<EntityDict, 'user', BRC<EntityDict>>[] = [
return 1;
},
} as CreateTrigger<EntityDict, 'user', BRC<EntityDict>>,
{
name: '当用户更新信息带有密码时将hasPassword附上true',
entity: 'user',
action: 'update',
when: 'before',
fn: async ({ operation }, context) => {
const { data, filter } = operation as EntityDict['user']['Update'];
const setData = async (userData: UpdateUserData) => {
if (userData.password || userData.passwordSha1) {
userData.hasPassword = true;
}
}
if (data instanceof Array) {
for (const item of data) {
await setData(item);
}
} else {
await setData(data);
}
return 1;
},
},
{
name: '系统生成的第一个用户默认注册为root用户的初始状态默认为shadow',
entity: 'user',

View File

@ -13,6 +13,7 @@ const userProjection: EntityDict['user']['Selection']['data'] = {
gender: 1,
birth: 1,
isRoot: 1,
hasPassword: 1,
extraFile$entity: {
$entity: 'extraFile',
data: {
@ -42,27 +43,43 @@ const userProjection: EntityDict['user']['Selection']['data'] = {
userId: 1,
},
},
user$ref: {
$entity: 'user',
email$user: {
$entity: 'email',
data: {
id: 1,
userState: 1,
refId: 1,
mobile$user: {
$entity: 'mobile',
data: {
id: 1,
mobile: 1,
userId: 1,
user: {
id: 1,
userState: 1,
refId: 1,
},
},
},
email: 1,
userId: 1,
},
},
loginName$user: {
$entity: 'loginName',
data: {
id: 1,
name: 1,
userId: 1,
},
},
// user$ref: {
// $entity: 'user',
// data: {
// id: 1,
// userState: 1,
// refId: 1,
// mobile$user: {
// $entity: 'mobile',
// data: {
// id: 1,
// mobile: 1,
// userId: 1,
// user: {
// id: 1,
// userState: 1,
// refId: 1,
// },
// },
// },
// },
// },
};
export const tokenProjection: EntityDict['token']['Selection']['data'] = {
id: 1,
@ -99,6 +116,28 @@ export const tokenProjection: EntityDict['token']['Selection']['data'] = {
refId: 1,
},
},
email: {
id: 1,
email: 1,
userId: 1,
ableState: 1,
user: {
id: 1,
userState: 1,
refId: 1,
},
},
loginName: {
id: 1,
name: 1,
userId: 1,
ableState: 1,
user: {
id: 1,
userState: 1,
refId: 1,
},
},
};
export const applicationProjection: EntityDict['application']['Selection']['data'] = {