@things-factory/operato-hub 6.1.83 → 6.1.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +46 -46
- package/server/controllers/bizplace-initializer/codes.ts +0 -32
- package/server/controllers/bizplace-initializer/dataset/codes.ts +0 -398
- package/server/controllers/bizplace-initializer/dataset/groups.ts +0 -21
- package/server/controllers/bizplace-initializer/dataset/index.ts +0 -5
- package/server/controllers/bizplace-initializer/dataset/menus.ts +0 -500
- package/server/controllers/bizplace-initializer/dataset/roles-privileges.ts +0 -402
- package/server/controllers/bizplace-initializer/dataset/settings.ts +0 -91
- package/server/controllers/bizplace-initializer/generate-bizplace-domain-roles.ts +0 -29
- package/server/controllers/bizplace-initializer/generate-bizplace-domain.ts +0 -56
- package/server/controllers/bizplace-initializer/groups.ts +0 -19
- package/server/controllers/bizplace-initializer/index.ts +0 -5
- package/server/controllers/bizplace-initializer/menus.ts +0 -42
- package/server/controllers/bizplace-initializer/settings.ts +0 -20
- package/server/controllers/company-initializer/business-register.ts +0 -59
- package/server/controllers/company-initializer/codes.ts +0 -147
- package/server/controllers/company-initializer/generate-company-roles.ts +0 -119
- package/server/controllers/company-initializer/index.ts +0 -6
- package/server/controllers/company-initializer/menus.ts +0 -359
- package/server/controllers/company-initializer/settings.ts +0 -33
- package/server/controllers/company-initializer/transporter.ts +0 -20
- package/server/controllers/index.ts +0 -0
- package/server/controllers/invitation.ts +0 -132
- package/server/controllers/utils/make-invitation-token.ts +0 -5
- package/server/controllers/utils/save-invitation-token.ts +0 -9
- package/server/entities/index.ts +0 -0
- package/server/errors/index.ts +0 -1
- package/server/errors/validation-error.ts +0 -17
- package/server/graphql/index.ts +0 -7
- package/server/graphql/resolvers/generators/generate-bizplace.ts +0 -40
- package/server/graphql/resolvers/generators/generate-company.ts +0 -76
- package/server/graphql/resolvers/generators/index.ts +0 -9
- package/server/graphql/resolvers/generators/update-domain-extType.ts +0 -55
- package/server/graphql/resolvers/index.ts +0 -8
- package/server/graphql/resolvers/invitations/index.ts +0 -5
- package/server/graphql/resolvers/invitations/partner-invitation.ts +0 -62
- package/server/graphql/resolvers/oauth2/company-roles-by-scope.ts +0 -38
- package/server/graphql/resolvers/oauth2/index.ts +0 -5
- package/server/graphql/resolvers/synchronization/auto-update-all-marketplace-product-variation-quantity.ts +0 -180
- package/server/graphql/resolvers/synchronization/create-dat-shipments.ts +0 -64
- package/server/graphql/resolvers/synchronization/fetch-sync-invoices.ts +0 -52
- package/server/graphql/resolvers/synchronization/fetch-sync-products.ts +0 -99
- package/server/graphql/resolvers/synchronization/fetch-sync-purchase-orders.ts +0 -75
- package/server/graphql/resolvers/synchronization/index.ts +0 -26
- package/server/graphql/resolvers/synchronization/sellercraft-pack-marketplace-order.ts +0 -91
- package/server/graphql/resolvers/synchronization/sync-all-products-to-sellercraft.ts +0 -39
- package/server/graphql/resolvers/synchronization/sync-products-from-account.ts +0 -40
- package/server/graphql/resolvers/synchronization/sync-products-to-account.ts +0 -64
- package/server/graphql/resolvers/synchronization/sync-products-to-sellercraft.ts +0 -176
- package/server/graphql/types/generators/generate-bizplace-input.ts +0 -11
- package/server/graphql/types/generators/generate-company-input.ts +0 -11
- package/server/graphql/types/generators/index.ts +0 -11
- package/server/graphql/types/generators/update-domain-type-input.ts +0 -8
- package/server/graphql/types/index.ts +0 -10
- package/server/graphql/types/invitations/index.ts +0 -5
- package/server/graphql/types/oauth2/company-role.ts +0 -8
- package/server/graphql/types/oauth2/index.ts +0 -7
- package/server/graphql/types/synchronization/index.ts +0 -33
- package/server/graphql/types/synchronization/sync-invoice-list.ts +0 -8
- package/server/graphql/types/synchronization/sync-invoice-set.ts +0 -38
- package/server/graphql/types/synchronization/sync-product-list.ts +0 -8
- package/server/graphql/types/synchronization/sync-product-set.ts +0 -8
- package/server/graphql/types/synchronization/sync-purchase-order-list.ts +0 -8
- package/server/graphql/types/synchronization/sync-purchase-order-set.ts +0 -28
- package/server/index.ts +0 -37
- package/server/middlewares/business-middleware.ts +0 -32
- package/server/middlewares/index.ts +0 -20
- package/server/middlewares/store-middleware.ts +0 -36
- package/server/middlewares/warehouse-middleware.ts +0 -36
- package/server/migrations/1597668478399-SeedBusinessDomain.ts +0 -34
- package/server/migrations/1597668478401-SeedBusinessRoles.ts +0 -377
- package/server/migrations/1608009991065-SeedUser.ts +0 -64
- package/server/migrations/index.ts +0 -9
- package/server/routers/api/index.ts +0 -3
- package/server/routers/api/restful-apis/unstable/add-contact-point.ts +0 -89
- package/server/routers/api/restful-apis/unstable/add-draft-release-order.ts +0 -198
- package/server/routers/api/restful-apis/unstable/add-inbound-order.ts +0 -246
- package/server/routers/api/restful-apis/unstable/add-marketplace-order.ts +0 -171
- package/server/routers/api/restful-apis/unstable/add-products.ts +0 -112
- package/server/routers/api/restful-apis/unstable/add-release-order.ts +0 -1061
- package/server/routers/api/restful-apis/unstable/add-sales-invoice.ts +0 -144
- package/server/routers/api/restful-apis/unstable/bizplace.ts +0 -45
- package/server/routers/api/restful-apis/unstable/cancel-marketplace-order.ts +0 -81
- package/server/routers/api/restful-apis/unstable/cancel-release-order.ts +0 -91
- package/server/routers/api/restful-apis/unstable/get-contact-point-list.ts +0 -110
- package/server/routers/api/restful-apis/unstable/get-delivery-order-detail.ts +0 -46
- package/server/routers/api/restful-apis/unstable/get-delivery-order-list.ts +0 -121
- package/server/routers/api/restful-apis/unstable/get-delivery-orders.ts +0 -178
- package/server/routers/api/restful-apis/unstable/get-goods-received-notes.ts +0 -134
- package/server/routers/api/restful-apis/unstable/get-inbound-order-detail.ts +0 -128
- package/server/routers/api/restful-apis/unstable/get-inbound-order-list.ts +0 -126
- package/server/routers/api/restful-apis/unstable/get-inventory-overall-product-group.ts +0 -99
- package/server/routers/api/restful-apis/unstable/get-inventory-product-group.ts +0 -107
- package/server/routers/api/restful-apis/unstable/get-marketplace-order-shipping-list.ts +0 -156
- package/server/routers/api/restful-apis/unstable/get-marketplace-store-list.ts +0 -81
- package/server/routers/api/restful-apis/unstable/get-onhand-inventories.ts +0 -125
- package/server/routers/api/restful-apis/unstable/get-partners.ts +0 -26
- package/server/routers/api/restful-apis/unstable/get-products.ts +0 -216
- package/server/routers/api/restful-apis/unstable/get-release-order-detail.ts +0 -138
- package/server/routers/api/restful-apis/unstable/get-release-order-list.ts +0 -199
- package/server/routers/api/restful-apis/unstable/get-warehouses.ts +0 -19
- package/server/routers/api/restful-apis/unstable/index.ts +0 -32
- package/server/routers/api/restful-apis/unstable/reject-inbound-order.ts +0 -46
- package/server/routers/api/restful-apis/unstable/set-marketplace-order-delivered.ts +0 -60
- package/server/routers/api/restful-apis/unstable/set-marketplace-order-failed-delivery.ts +0 -60
- package/server/routers/api/restful-apis/unstable/update-marketplace-order.ts +0 -111
- package/server/routers/api/restful-apis/unstable/update-marketplace-shipping-order.ts +0 -107
- package/server/routers/api/restful-apis/unstable/update-release-order-details.ts +0 -94
- package/server/routers/api/restful-apis/v1/add-contact-point.ts +0 -77
- package/server/routers/api/restful-apis/v1/add-draft-release-order.ts +0 -196
- package/server/routers/api/restful-apis/v1/add-inbound-order.ts +0 -243
- package/server/routers/api/restful-apis/v1/add-marketplace-order.ts +0 -172
- package/server/routers/api/restful-apis/v1/add-products.ts +0 -112
- package/server/routers/api/restful-apis/v1/add-release-order.ts +0 -967
- package/server/routers/api/restful-apis/v1/bizplace.ts +0 -45
- package/server/routers/api/restful-apis/v1/cancel-marketplace-order.ts +0 -81
- package/server/routers/api/restful-apis/v1/cancel-release-order.ts +0 -91
- package/server/routers/api/restful-apis/v1/get-contact-point-list.ts +0 -110
- package/server/routers/api/restful-apis/v1/get-delivery-order-detail.ts +0 -46
- package/server/routers/api/restful-apis/v1/get-delivery-order-list.ts +0 -121
- package/server/routers/api/restful-apis/v1/get-delivery-orders.ts +0 -178
- package/server/routers/api/restful-apis/v1/get-goods-received-notes.ts +0 -134
- package/server/routers/api/restful-apis/v1/get-inbound-order-detail.ts +0 -128
- package/server/routers/api/restful-apis/v1/get-inbound-order-list.ts +0 -126
- package/server/routers/api/restful-apis/v1/get-inventory-overall-product-group.ts +0 -99
- package/server/routers/api/restful-apis/v1/get-inventory-product-group.ts +0 -112
- package/server/routers/api/restful-apis/v1/get-marketplace-order-shipping-list.ts +0 -156
- package/server/routers/api/restful-apis/v1/get-marketplace-store-list.ts +0 -81
- package/server/routers/api/restful-apis/v1/get-onhand-inventories.ts +0 -125
- package/server/routers/api/restful-apis/v1/get-partners.ts +0 -26
- package/server/routers/api/restful-apis/v1/get-products.ts +0 -216
- package/server/routers/api/restful-apis/v1/get-release-order-detail.ts +0 -134
- package/server/routers/api/restful-apis/v1/get-release-order-list.ts +0 -198
- package/server/routers/api/restful-apis/v1/get-warehouses.ts +0 -19
- package/server/routers/api/restful-apis/v1/index.ts +0 -31
- package/server/routers/api/restful-apis/v1/reject-inbound-order.ts +0 -46
- package/server/routers/api/restful-apis/v1/set-marketplace-order-delivered.ts +0 -60
- package/server/routers/api/restful-apis/v1/set-marketplace-order-failed-delivery.ts +0 -60
- package/server/routers/api/restful-apis/v1/update-marketplace-order.ts +0 -111
- package/server/routers/api/restful-apis/v1/update-marketplace-shipping-order.ts +0 -104
- package/server/routers/api/restful-apis/v1/update-release-order-details.ts +0 -94
- package/server/routers/api/restful-apis/v2/add-contact-point.ts +0 -77
- package/server/routers/api/restful-apis/v2/add-draft-release-order.ts +0 -196
- package/server/routers/api/restful-apis/v2/add-inbound-order.ts +0 -243
- package/server/routers/api/restful-apis/v2/add-marketplace-order.ts +0 -172
- package/server/routers/api/restful-apis/v2/add-products.ts +0 -112
- package/server/routers/api/restful-apis/v2/add-release-order.ts +0 -967
- package/server/routers/api/restful-apis/v2/bizplace.ts +0 -45
- package/server/routers/api/restful-apis/v2/cancel-marketplace-order.ts +0 -81
- package/server/routers/api/restful-apis/v2/cancel-release-order.ts +0 -91
- package/server/routers/api/restful-apis/v2/get-contact-point-list.ts +0 -110
- package/server/routers/api/restful-apis/v2/get-delivery-order-detail.ts +0 -46
- package/server/routers/api/restful-apis/v2/get-delivery-order-list.ts +0 -121
- package/server/routers/api/restful-apis/v2/get-delivery-orders.ts +0 -178
- package/server/routers/api/restful-apis/v2/get-goods-received-notes.ts +0 -134
- package/server/routers/api/restful-apis/v2/get-inbound-order-detail.ts +0 -128
- package/server/routers/api/restful-apis/v2/get-inbound-order-list.ts +0 -126
- package/server/routers/api/restful-apis/v2/get-inventory-overall-product-group.ts +0 -99
- package/server/routers/api/restful-apis/v2/get-inventory-product-group.ts +0 -112
- package/server/routers/api/restful-apis/v2/get-marketplace-order-shipping-list.ts +0 -156
- package/server/routers/api/restful-apis/v2/get-marketplace-store-list.ts +0 -81
- package/server/routers/api/restful-apis/v2/get-onhand-inventories.ts +0 -125
- package/server/routers/api/restful-apis/v2/get-partners.ts +0 -26
- package/server/routers/api/restful-apis/v2/get-products.ts +0 -216
- package/server/routers/api/restful-apis/v2/get-release-order-detail.ts +0 -134
- package/server/routers/api/restful-apis/v2/get-release-order-list.ts +0 -198
- package/server/routers/api/restful-apis/v2/get-warehouses.ts +0 -19
- package/server/routers/api/restful-apis/v2/index.ts +0 -31
- package/server/routers/api/restful-apis/v2/reject-inbound-order.ts +0 -46
- package/server/routers/api/restful-apis/v2/set-marketplace-order-delivered.ts +0 -60
- package/server/routers/api/restful-apis/v2/set-marketplace-order-failed-delivery.ts +0 -60
- package/server/routers/api/restful-apis/v2/update-marketplace-order.ts +0 -111
- package/server/routers/api/restful-apis/v2/update-marketplace-shipping-order.ts +0 -104
- package/server/routers/api/restful-apis/v2/update-release-order-details.ts +0 -94
- package/server/routers/auth-invitation-router.ts +0 -25
- package/server/routers/business/bizplace-register-router.ts +0 -31
- package/server/routers/business/business-register-router.ts +0 -32
- package/server/routers/business/index.ts +0 -3
- package/server/routers/business/path-base-business-router.ts +0 -15
- package/server/routes.ts +0 -28
- package/server/templates/account-unlock-email.ts +0 -64
- package/server/templates/invitation-email.ts +0 -65
- package/server/templates/reset-password-email.ts +0 -64
- package/server/templates/verification-email.ts +0 -65
- package/server/utils/build-map.ts +0 -18
- package/server/utils/get-warehouses.ts +0 -115
- package/server/utils/index.ts +0 -3
- package/server/utils/order-no-generator.ts +0 -8
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
const settings = [
|
|
2
|
-
{ name: 'dashboard:CUST', description: 'dashboard for customer', category: 'board' },
|
|
3
|
-
{ name: 'dashboard:OFFICE ADMIN', description: 'dashboard for OFFICE ADMIN', category: 'board' },
|
|
4
|
-
{ name: 'dashboard:SYSTEM ADMIN', description: 'dashboard for SUPER ADMIN', category: 'board' },
|
|
5
|
-
{ name: 'dashboard:W/H MANAGER', description: 'dashboard for W/H MANAGER', category: 'board' },
|
|
6
|
-
{ name: 'location-label', description: 'board id for location label', category: 'board' },
|
|
7
|
-
{ name: 'pallet-label', description: 'board id for pallet label', category: 'board' },
|
|
8
|
-
{ name: 'carton-label', description: 'board id for carton label', category: 'board' },
|
|
9
|
-
{ name: 'rule-for-creating-ro', description: 'location sorting rules', category: 'location' },
|
|
10
|
-
{ name: 'rule-for-inspecting-product', description: 'location sorting rules', category: 'location' },
|
|
11
|
-
{ name: 'rule-for-inventory-assignment', description: 'location sorting rules', category: 'location' },
|
|
12
|
-
{ name: 'rule-for-picking-product', description: 'location sorting rules', category: 'location' },
|
|
13
|
-
{ name: 'rule-for-worksheet-release-goods-item', description: 'worksheet release goods item location sorting rules', category: 'location' },
|
|
14
|
-
{ name: 'pallet-id-rule', description: 'pallet ID rule', category: 'id-rule' },
|
|
15
|
-
{ name: 'enable-custom-clearance-transportation', description: 'custom clearance transport', category: 'id-rule' },
|
|
16
|
-
{ name: 'enable-transportation-service', description: 'warehouse transport', category: 'id-rule' },
|
|
17
|
-
{ name: 'hide-cross-dock', description: 'hide cross docking button', category: 'id-rule' },
|
|
18
|
-
{ name: 'disable-reusable-pallet', description: 'hide and disable reusable pallet text field', category: 'id-rule' }
|
|
19
|
-
]
|
|
20
|
-
|
|
21
|
-
import { Setting } from '@things-factory/setting-base'
|
|
22
|
-
|
|
23
|
-
export async function initSettings(tx, domain) {
|
|
24
|
-
const settingRepo = tx.getRepository(Setting)
|
|
25
|
-
return await settingRepo.save(
|
|
26
|
-
settings.map(setting => {
|
|
27
|
-
return {
|
|
28
|
-
...setting,
|
|
29
|
-
domain
|
|
30
|
-
}
|
|
31
|
-
})
|
|
32
|
-
)
|
|
33
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { CourierService } from '@things-factory/integration-lmd'
|
|
2
|
-
|
|
3
|
-
const transporters = [
|
|
4
|
-
{ name: 'SnT CJ CENTURY LOGISTIC', transporterId: 'TBD000018' },
|
|
5
|
-
{ name: 'NINJAVAN', transporterId: 'TBD000014' },
|
|
6
|
-
{ name: 'POS MALAYSIA', transporterId: 'TBD000015' },
|
|
7
|
-
{ name: 'SKYNET - SNT GLOBAL', transporterId: 'TBD000004' }
|
|
8
|
-
]
|
|
9
|
-
|
|
10
|
-
export async function initTransporter(tx, domain) {
|
|
11
|
-
const transporterRepo = tx.getRepository(CourierService)
|
|
12
|
-
return await transporterRepo.save(
|
|
13
|
-
transporters.map(transporter => {
|
|
14
|
-
return {
|
|
15
|
-
...transporter,
|
|
16
|
-
domain
|
|
17
|
-
}
|
|
18
|
-
})
|
|
19
|
-
)
|
|
20
|
-
}
|
|
File without changes
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { URL } from 'url'
|
|
2
|
-
import { ILike } from 'typeorm'
|
|
3
|
-
|
|
4
|
-
import { Invitation, User } from '@things-factory/auth-base'
|
|
5
|
-
import { Bizplace } from '@things-factory/biz-base'
|
|
6
|
-
import { sendEmail } from '@things-factory/email-base'
|
|
7
|
-
import { getRepository } from '@things-factory/shell'
|
|
8
|
-
|
|
9
|
-
import { getInvitationEmailForm } from '../templates/invitation-email'
|
|
10
|
-
import { makeInvitationToken } from './utils/make-invitation-token'
|
|
11
|
-
import { saveInvitationToken } from './utils/save-invitation-token'
|
|
12
|
-
|
|
13
|
-
export async function invite(attrs, withEmailInvitation?: Boolean) {
|
|
14
|
-
const { email, reference, type, context } = attrs
|
|
15
|
-
|
|
16
|
-
// 기존 사용자가 있는 경우.
|
|
17
|
-
// - type이 company: reference 필드가 비어있는 지 확인, 비어있다면, 초대장 전송
|
|
18
|
-
// - type이 bizplace: 사용자의 bizplace를 확인해서 없다면, 초대장 전송
|
|
19
|
-
// - 그 외에는 이미 초대되어있다는 메시지로 종료
|
|
20
|
-
|
|
21
|
-
// 기존 사용자가 없는 경우.
|
|
22
|
-
// - 초대장 전송
|
|
23
|
-
|
|
24
|
-
const repository = getRepository(User)
|
|
25
|
-
var user = (await repository.findOne({ where: { email: ILike(email) }, relations: ['bizplaces'] })) as User & {
|
|
26
|
-
bizplaces: Bizplace[]
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (user) {
|
|
30
|
-
if (type == 'company') {
|
|
31
|
-
if (reference == user.reference) {
|
|
32
|
-
throw new Error('user already a member of the company.')
|
|
33
|
-
}
|
|
34
|
-
} else if (type == 'bizplace') {
|
|
35
|
-
var bizplace: Bizplace = await getRepository(Bizplace).findOneBy({ id: reference })
|
|
36
|
-
|
|
37
|
-
if (!bizplace) {
|
|
38
|
-
throw new Error('invalid bizplace.')
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const userBizplaces: Bizplace[] = user.bizplaces
|
|
42
|
-
if (userBizplaces.find((userBizplace: Bizplace) => userBizplace.id === bizplace.id)) {
|
|
43
|
-
throw new Error('user already a member of the bizplace.')
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// invitation 레코드에 동일한 invitation이 있는 지 확인
|
|
49
|
-
var invitation = await getRepository(Invitation).findOneBy({
|
|
50
|
-
email,
|
|
51
|
-
reference,
|
|
52
|
-
type
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
if (!invitation) {
|
|
56
|
-
invitation = await getRepository(Invitation).save({
|
|
57
|
-
email,
|
|
58
|
-
reference,
|
|
59
|
-
type
|
|
60
|
-
})
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
var succeed = false
|
|
64
|
-
if (withEmailInvitation) {
|
|
65
|
-
succeed = await sendInvitationEmail({
|
|
66
|
-
invitation,
|
|
67
|
-
context
|
|
68
|
-
})
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
try {
|
|
72
|
-
return {
|
|
73
|
-
// token: await signin({
|
|
74
|
-
// email,
|
|
75
|
-
// password
|
|
76
|
-
// })
|
|
77
|
-
}
|
|
78
|
-
} catch (e) {
|
|
79
|
-
return { token: null }
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export async function acceptInvitation(token) {
|
|
84
|
-
var invitation = await getRepository(Invitation).findOneBy({
|
|
85
|
-
token
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
if (invitation) {
|
|
89
|
-
return false
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return true
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export async function sendInvitationEmail({ invitation, context }) {
|
|
96
|
-
try {
|
|
97
|
-
var token = makeInvitationToken()
|
|
98
|
-
await saveInvitationToken(invitation.id, token)
|
|
99
|
-
|
|
100
|
-
if (invitation) {
|
|
101
|
-
var serviceUrl = new URL(`/auth/accept/${token}`, context.header.referer)
|
|
102
|
-
|
|
103
|
-
await sendEmail({
|
|
104
|
-
receiver: invitation.email,
|
|
105
|
-
subject: 'Invitation',
|
|
106
|
-
content: getInvitationEmailForm({
|
|
107
|
-
email: invitation.email,
|
|
108
|
-
acceptUrl: serviceUrl
|
|
109
|
-
})
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
return true
|
|
113
|
-
}
|
|
114
|
-
} catch (e) {
|
|
115
|
-
return false
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export async function resendInvitationEmail({ email, reference, type }, context) {
|
|
120
|
-
var invitation = await getRepository(Invitation).findOneBy({
|
|
121
|
-
email,
|
|
122
|
-
reference,
|
|
123
|
-
type
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
if (!invitation) return false
|
|
127
|
-
|
|
128
|
-
return await sendInvitationEmail({
|
|
129
|
-
invitation,
|
|
130
|
-
context
|
|
131
|
-
})
|
|
132
|
-
}
|
package/server/entities/index.ts
DELETED
|
File without changes
|
package/server/errors/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './validation-error'
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
type ValidationErrorArgument = {
|
|
2
|
-
errorCode: string
|
|
3
|
-
message: string
|
|
4
|
-
detail?: Object
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export class ValidationError extends Error {
|
|
8
|
-
errorCode: any
|
|
9
|
-
detail: Object
|
|
10
|
-
constructor({ errorCode, message, detail }: ValidationErrorArgument) {
|
|
11
|
-
super(errorCode)
|
|
12
|
-
this.name = 'validation-error'
|
|
13
|
-
this.errorCode = errorCode,
|
|
14
|
-
this.message = message
|
|
15
|
-
this.detail = detail
|
|
16
|
-
}
|
|
17
|
-
}
|
package/server/graphql/index.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { Raw } from 'typeorm'
|
|
2
|
-
|
|
3
|
-
import { Bizplace } from '@things-factory/biz-base'
|
|
4
|
-
|
|
5
|
-
import { generateBizplaceDomain } from '../../../controllers/bizplace-initializer/generate-bizplace-domain'
|
|
6
|
-
|
|
7
|
-
export const generateBizplace = {
|
|
8
|
-
async generateBizplace(_: any, { bizplaceInput }, context: ResolverContext) {
|
|
9
|
-
const { tx, business: company, user } = context.state
|
|
10
|
-
const { name, description, address, postalCode, latlng } = bizplaceInput
|
|
11
|
-
|
|
12
|
-
if (/^[a-zA-Z ]+$/.test(name)) {
|
|
13
|
-
const oldBizplace = await tx.getRepository(Bizplace).findOne({
|
|
14
|
-
where: {
|
|
15
|
-
name: Raw(alias => `LOWER(${alias}) LIKE '${name.toLowerCase()}'`)
|
|
16
|
-
}
|
|
17
|
-
})
|
|
18
|
-
if (oldBizplace) {
|
|
19
|
-
throw new Error('bizplace name is duplicated')
|
|
20
|
-
}
|
|
21
|
-
} else {
|
|
22
|
-
throw new Error('bizplace name should consist only of letters or dashes')
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const bizplace = await tx.getRepository(Bizplace).save({
|
|
26
|
-
name,
|
|
27
|
-
description,
|
|
28
|
-
address,
|
|
29
|
-
postalCode,
|
|
30
|
-
latlng,
|
|
31
|
-
company,
|
|
32
|
-
updater: user,
|
|
33
|
-
creator: user
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
await generateBizplaceDomain(bizplace.id, user, tx)
|
|
37
|
-
|
|
38
|
-
return bizplace
|
|
39
|
-
}
|
|
40
|
-
}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { ILike } from 'typeorm'
|
|
2
|
-
import { User } from '@things-factory/auth-base'
|
|
3
|
-
import { Company } from '@things-factory/biz-base'
|
|
4
|
-
import { Domain } from '@things-factory/shell'
|
|
5
|
-
import { slugger } from '@things-factory/utils'
|
|
6
|
-
|
|
7
|
-
import { initGroups } from '../../../controllers/bizplace-initializer'
|
|
8
|
-
import { generateBusinessRoles } from '../../../controllers/company-initializer/generate-company-roles'
|
|
9
|
-
|
|
10
|
-
export const generateCompany = {
|
|
11
|
-
async generateCompany(_: any, { companyInput }, context: ResolverContext) {
|
|
12
|
-
const { tx, user } = context.state
|
|
13
|
-
const { name, description, address, postalCode, latlng } = companyInput
|
|
14
|
-
|
|
15
|
-
const subdomain = slugger(name)
|
|
16
|
-
|
|
17
|
-
/* check */
|
|
18
|
-
const oldCompany = await tx.getRepository(Company).findOne({
|
|
19
|
-
where: {
|
|
20
|
-
name
|
|
21
|
-
}
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
if (oldCompany) {
|
|
25
|
-
throw new Error('company name is duplicated')
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const oldDomain = await tx.getRepository(Domain).findOne({
|
|
29
|
-
where: {
|
|
30
|
-
name
|
|
31
|
-
}
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
if (oldDomain) {
|
|
35
|
-
throw new Error('subdomain is duplicated')
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/* create company */
|
|
39
|
-
const domain: Domain = await tx.getRepository(Domain).save({
|
|
40
|
-
subdomain,
|
|
41
|
-
name,
|
|
42
|
-
extType: 'company'
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
/* create roles */
|
|
46
|
-
const domainRoles = await generateBusinessRoles(domain, tx)
|
|
47
|
-
|
|
48
|
-
const company: Company = await tx.getRepository(Company).save({
|
|
49
|
-
...companyInput,
|
|
50
|
-
owner: user,
|
|
51
|
-
domain
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
const userHavingRoles: User = await tx.getRepository(User).findOne({
|
|
55
|
-
where: { email: ILike(user.email) },
|
|
56
|
-
relations: ['domains', 'roles']
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
user.domains = [...user.domains, domain]
|
|
60
|
-
user.roles = [...userHavingRoles.roles, domainRoles.find(r => r.name === 'BUSINESS-OWNER')]
|
|
61
|
-
|
|
62
|
-
await tx.getRepository(User).save(user)
|
|
63
|
-
|
|
64
|
-
await initGroups(tx, domain)
|
|
65
|
-
|
|
66
|
-
return await tx.getRepository(Company).save({
|
|
67
|
-
name,
|
|
68
|
-
description,
|
|
69
|
-
address,
|
|
70
|
-
postalCode,
|
|
71
|
-
latlng,
|
|
72
|
-
updater: user,
|
|
73
|
-
creator: user
|
|
74
|
-
})
|
|
75
|
-
}
|
|
76
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { generateCompany } from './generate-company'
|
|
2
|
-
import { generateBizplace } from './generate-bizplace'
|
|
3
|
-
import { updateDomainExtType } from './update-domain-extType'
|
|
4
|
-
|
|
5
|
-
export const Mutation = {
|
|
6
|
-
...generateCompany,
|
|
7
|
-
...generateBizplace,
|
|
8
|
-
...updateDomainExtType
|
|
9
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { EntityManager, ILike, Repository } from 'typeorm'
|
|
2
|
-
|
|
3
|
-
import { Privilege, Role, User } from '@things-factory/auth-base'
|
|
4
|
-
import { Domain } from '@things-factory/shell'
|
|
5
|
-
|
|
6
|
-
import { initCodes, initGroups, initMenus, initSettings } from '../../../controllers/bizplace-initializer'
|
|
7
|
-
import { generateBizplaceDomainRoles } from '../../../controllers/bizplace-initializer/generate-bizplace-domain-roles'
|
|
8
|
-
|
|
9
|
-
export const updateDomainExtType = {
|
|
10
|
-
async updateDomainType(_: any, { domainTypeInput }, context: ResolverContext) {
|
|
11
|
-
const { tx, user } = context.state
|
|
12
|
-
const { id, extType }: { id: string; extType: string } = domainTypeInput
|
|
13
|
-
|
|
14
|
-
let domain: Domain = await tx.getRepository(Domain).findOne({ where: { id } })
|
|
15
|
-
domain.extType = extType
|
|
16
|
-
|
|
17
|
-
domain = await tx.getRepository(Domain).save(domain)
|
|
18
|
-
|
|
19
|
-
await generateBizplaceDomainRoles(domain, tx)
|
|
20
|
-
await initMenus(tx, domain)
|
|
21
|
-
await initCodes(tx, domain)
|
|
22
|
-
await initSettings(tx, domain)
|
|
23
|
-
await initGroups(tx, domain)
|
|
24
|
-
|
|
25
|
-
/* Creating relations
|
|
26
|
-
* 1) users_domains table
|
|
27
|
-
* 2) users_roles table
|
|
28
|
-
*/
|
|
29
|
-
await createRelations(tx, domain, user.email)
|
|
30
|
-
|
|
31
|
-
return domain
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async function createRelations(tx: EntityManager, domain: Domain, email: string) {
|
|
36
|
-
const userRepo: Repository<User> = tx.getRepository(User)
|
|
37
|
-
const user: User = await userRepo.findOne({ where: { email: ILike(email) }, relations: ['domains', 'roles'] })
|
|
38
|
-
const roleRepo: Repository<Role> = tx.getRepository(Role)
|
|
39
|
-
const role: Role = await roleRepo.findOne({ where: { domain: { id: domain.id } }, relations: ['domain'] })
|
|
40
|
-
const privilegeRepo: Repository<Privilege> = tx.getRepository(Privilege)
|
|
41
|
-
const privileges: Privilege[] = await privilegeRepo.find()
|
|
42
|
-
|
|
43
|
-
const domains: Domain[] = user.domains
|
|
44
|
-
domains.push(domain)
|
|
45
|
-
user.domains = domains
|
|
46
|
-
|
|
47
|
-
const roles: Role[] = await user.roles
|
|
48
|
-
roles.push(role)
|
|
49
|
-
user.roles = roles
|
|
50
|
-
|
|
51
|
-
role.privileges = privileges
|
|
52
|
-
|
|
53
|
-
await userRepo.save(user)
|
|
54
|
-
await roleRepo.save(role)
|
|
55
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import * as Generators from './generators'
|
|
2
|
-
import * as Oauth2 from './oauth2'
|
|
3
|
-
import * as Invitations from './invitations'
|
|
4
|
-
import * as Synchronization from './synchronization'
|
|
5
|
-
|
|
6
|
-
export const queries = [Synchronization.Query, Oauth2.Query]
|
|
7
|
-
|
|
8
|
-
export const mutations = [Generators.Mutation, Invitations.Mutation, Synchronization.Mutation]
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { Raw } from 'typeorm'
|
|
2
|
-
|
|
3
|
-
import { Bizplace, Partner } from '@things-factory/biz-base'
|
|
4
|
-
import { Domain, getRepository } from '@things-factory/shell'
|
|
5
|
-
|
|
6
|
-
export const partnerInvitationResolver = {
|
|
7
|
-
async partnerInvitation(_: any, { bizplaceName }: { bizplaceName: string }, context: ResolverContext): Promise<void> {
|
|
8
|
-
const { domain, user } = context.state
|
|
9
|
-
|
|
10
|
-
// Check whether bizplace exists or not
|
|
11
|
-
const partnerBizplace: Bizplace = await getRepository(Bizplace).findOne({
|
|
12
|
-
where: {
|
|
13
|
-
name: Raw(alias => `LOWER(${alias}) LIKE '${bizplaceName.toLowerCase()}'`)
|
|
14
|
-
}
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
const partnerDomain: Domain = await getRepository(Domain).findOne({
|
|
18
|
-
where: {
|
|
19
|
-
name: partnerBizplace.name
|
|
20
|
-
}
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
if (partnerDomain && partnerDomain.extType === 'company') {
|
|
24
|
-
throw new Error(context.t('error.business cannot be invited.'))
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if (!partnerBizplace) {
|
|
28
|
-
throw new Error(context.t('error.failed to find x', { x: context.t('field.bizplace') }))
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
if (domain.name === partnerBizplace.name) {
|
|
32
|
-
throw new Error(context.t('error.failed to find x', { x: context.t('field.bizplace') }))
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const domainBizplace: Bizplace = await getRepository(Bizplace).findOne({
|
|
36
|
-
where: { domain: { id: domain.id } }
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
if (!domainBizplace) {
|
|
40
|
-
throw new Error(context.t('error.failed to find x', { x: 'domain bizplace' }))
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Check whether the bizplace is partner already or not
|
|
44
|
-
const partner: Partner = await getRepository(Partner).findOne({
|
|
45
|
-
where: { domainBizplace: { id: domainBizplace.id }, partnerBizplace: { id: partnerBizplace.id } }
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
if (partner) {
|
|
49
|
-
throw new Error(
|
|
50
|
-
context.t('error.x already exists in y', { x: partnerBizplace.name, y: context.t('field.partner') })
|
|
51
|
-
)
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
let newPartner: Partner = new Partner()
|
|
55
|
-
newPartner.type = 'CUSTOMER'
|
|
56
|
-
newPartner.domainBizplace = domainBizplace
|
|
57
|
-
newPartner.partnerBizplace = partnerBizplace
|
|
58
|
-
newPartner.requester = user
|
|
59
|
-
newPartner.approver = user
|
|
60
|
-
await getRepository(Partner).save(newPartner)
|
|
61
|
-
}
|
|
62
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { getUserDomains, Role, User } from '@things-factory/auth-base'
|
|
2
|
-
import { Domain, getRepository } from '@things-factory/shell'
|
|
3
|
-
|
|
4
|
-
type CompanyRole = {
|
|
5
|
-
domain: Domain
|
|
6
|
-
roles: Role[]
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export const companyRolesByScopeResolver = {
|
|
10
|
-
async companyRolesByScope(_: void, { scope }: { scope: string[] }, context: ResolverContext): Promise<CompanyRole[]> {
|
|
11
|
-
let { user } = context.state
|
|
12
|
-
const userDomains: Domain[] = await getUserDomains(user)
|
|
13
|
-
const availableDomains: Domain[] = userDomains.filter((domain: Domain) => scope.indexOf(domain.extType) >= 0)
|
|
14
|
-
const availableDomainIDs: string[] = availableDomains.map((domain: Domain) => domain.id)
|
|
15
|
-
user = await getRepository(User).findOne({
|
|
16
|
-
where: { id: user.id },
|
|
17
|
-
relations: ['roles', 'roles.domain']
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
const availableRoles: Role[] = user.roles.filter((role: Role) => availableDomainIDs.indexOf(role.domain.id) >= 0)
|
|
21
|
-
|
|
22
|
-
const companyRoleMap: Map<string, Role[]> = new Map<string, Role[]>()
|
|
23
|
-
availableRoles.forEach((role: Role) => {
|
|
24
|
-
if (companyRoleMap.has(role.domain.id)) {
|
|
25
|
-
companyRoleMap.get(role.domain.id).push(role)
|
|
26
|
-
} else {
|
|
27
|
-
companyRoleMap.set(role.domain.id, [role])
|
|
28
|
-
}
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
let companyRoles: CompanyRole[] = []
|
|
32
|
-
companyRoleMap.forEach((roles: Role[]) => {
|
|
33
|
-
companyRoles.push({ domain: roles[0].domain, roles })
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
return companyRoles
|
|
37
|
-
}
|
|
38
|
-
}
|