@things-factory/transport-base 8.0.0-beta.1 → 8.0.0-beta.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/transport-base",
3
- "version": "8.0.0-beta.1",
3
+ "version": "8.0.0-beta.4",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -24,7 +24,7 @@
24
24
  "migration:create": "node ../../node_modules/typeorm/cli.js migration:create ./server/migrations/migration"
25
25
  },
26
26
  "dependencies": {
27
- "@things-factory/biz-base": "^8.0.0-beta.1"
27
+ "@things-factory/biz-base": "^8.0.0-beta.4"
28
28
  },
29
- "gitHead": "36c494e587640c1490318ef7b95adab02606e0c2"
29
+ "gitHead": "d83d12ed4ba07177dff1dac26e37be347d156b43"
30
30
  }
@@ -1 +0,0 @@
1
- export * from './transport'
@@ -1,10 +0,0 @@
1
- export const DRIVER_STATUS = {
2
- AVAILABLE: 'AVAILABLE',
3
- OCCUPIED: 'OCCUPIED'
4
- }
5
-
6
- export const TRUCK_STATUS = {
7
- AVAILABLE: 'AVAILABLE',
8
- IN_USE: 'IN_USE',
9
- ASSIGNED: 'ASSIGNED'
10
- }
File without changes
package/server/index.ts DELETED
@@ -1,3 +0,0 @@
1
- export * from './constants'
2
- export * from './migrations'
3
- export * from './service'
File without changes
@@ -1,9 +0,0 @@
1
- const glob = require('glob')
2
- const path = require('path')
3
-
4
- export var migrations = []
5
-
6
- glob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function(file) {
7
- if (file.indexOf('index.js') !== -1) return
8
- migrations = migrations.concat(Object.values(require(path.resolve(file))) || [])
9
- })
@@ -1,25 +0,0 @@
1
- /* IMPORT ENTITIES AND RESOLVERS */
2
- import { entities as TransportDriverEntity, resolvers as TransportDriverResolvers } from './transport-driver'
3
- import { entities as TransportVehicleEntity, resolvers as TransportVehicleResolvers } from './transport-vehicle'
4
-
5
- /* EXPORT ENTITY TYPES */
6
- export * from './transport-driver/transport-driver'
7
- export * from './transport-vehicle/transport-vehicle'
8
-
9
- /* EXPORT TYPES */
10
- export * from './transport-driver/transport-driver-types'
11
- export * from './transport-vehicle/transport-vehicle-types'
12
-
13
- export const entities = [
14
- /* ENTITIES */
15
- ...TransportDriverEntity,
16
- ...TransportVehicleEntity
17
- ]
18
-
19
- export const schema = {
20
- resolverClasses: [
21
- /* RESOLVER CLASSES */
22
- ...TransportDriverResolvers,
23
- ...TransportVehicleResolvers
24
- ]
25
- }
@@ -1,6 +0,0 @@
1
- import { TransportDriver } from './transport-driver'
2
- import { TransportDriverMutation } from './transport-driver-mutation'
3
- import { TransportDriverQuery } from './transport-driver-query'
4
-
5
- export const entities = [TransportDriver]
6
- export const resolvers = [TransportDriverQuery, TransportDriverMutation]
@@ -1,161 +0,0 @@
1
- import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
2
- import { EntityManager, In, Repository } from 'typeorm'
3
-
4
- import { User } from '@things-factory/auth-base'
5
- import { Domain, getRepository } from '@things-factory/shell'
6
-
7
- import { NewTransportDriver, TransportDriverPatch } from '../'
8
- import { TransportDriver } from './transport-driver'
9
-
10
- const debug = require('debug')('things-factory:operato-wms:addTransportDriver')
11
-
12
- @Resolver(TransportDriver)
13
- export class TransportDriverMutation {
14
- @Directive('@privilege(category: "transport", privilege: "mutation")')
15
- @Directive('@transaction')
16
- @Mutation(returns => TransportDriver)
17
- async createTransportDriver(
18
- @Arg('transportDriver', type => NewTransportDriver) transportDriver: NewTransportDriver,
19
- @Ctx() context: ResolverContext
20
- ): Promise<TransportDriver> {
21
- const { tx, domain, user } = context.state
22
- return await createTransportDriver(transportDriver, domain, user, tx)
23
- }
24
-
25
- @Directive('@privilege(category: "transport", privilege: "mutation")')
26
- @Directive('@transaction')
27
- @Mutation(returns => TransportDriver)
28
- async updateTransportDriver(
29
- @Arg('id') id: string,
30
- @Arg('patch', type => TransportDriverPatch) patch: TransportDriverPatch,
31
- @Ctx() context: ResolverContext
32
- ): Promise<TransportDriver> {
33
- const { tx, domain, user } = context.state
34
-
35
- return await updateTransportDriver(id, patch, domain, user, tx)
36
- }
37
-
38
- @Directive('@privilege(category: "transport", privilege: "mutation")')
39
- @Directive('@transaction')
40
- @Mutation(returns => Boolean)
41
- async deleteTransportDriver(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
42
- const { tx } = context.state
43
-
44
- return await deleteTransportDriver(id, tx)
45
- }
46
-
47
- @Directive('@privilege(category: "transport", privilege: "mutation")')
48
- @Directive('@transaction')
49
- @Mutation(returns => Boolean)
50
- async deleteTransportDrivers(
51
- @Arg('ids', type => [String]) ids: string[],
52
- @Ctx() context: ResolverContext
53
- ): Promise<boolean> {
54
- return await deleteTransportDrivers(ids, context)
55
- }
56
-
57
- @Directive('@privilege(category: "transport", privilege: "mutation")')
58
- @Directive('@transaction')
59
- @Mutation(returns => [TransportDriver])
60
- async updateMultipleTransportDriver(
61
- @Arg('patches', type => [TransportDriverPatch]) patches: TransportDriverPatch[],
62
- @Ctx() context: ResolverContext
63
- ): Promise<TransportDriver[]> {
64
- const { tx, domain, user } = context.state
65
-
66
- let results = []
67
- const _createRecords = patches.filter((patch: any) => patch.cuFlag === '+')
68
- const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
69
-
70
- if (_createRecords.length > 0) {
71
- for (let i = 0; i < _createRecords.length; i++) {
72
- const patch: TransportDriverPatch = _createRecords[i]
73
- const result = await createTransportDriver(patch as NewTransportDriver, domain, user, tx)
74
- results.push({ ...result, cuFlag: '+' })
75
- }
76
- }
77
-
78
- if (_updateRecords.length > 0) {
79
- for (let i = 0; i < _updateRecords.length; i++) {
80
- const patch: TransportDriverPatch = _updateRecords[i]
81
- const result = await updateTransportDriver(patch.id, patch, domain, user, tx)
82
- results.push({ ...result, cuFlag: 'M' })
83
- }
84
- }
85
-
86
- return results
87
- }
88
- }
89
-
90
- export async function createTransportDriver(
91
- transportDriver: NewTransportDriver,
92
- domain: Domain,
93
- user: User,
94
- tx?: EntityManager
95
- ) {
96
- const repository: Repository<TransportDriver> = tx
97
- ? tx.getRepository(TransportDriver)
98
- : getRepository(TransportDriver)
99
-
100
- const existingUsers: string[] = (
101
- await tx.getRepository(TransportDriver).find({ where: { domain: { id: domain.id } }, relations: ['user'] })
102
- ).map(driver => driver.userId)
103
- if (existingUsers.includes(transportDriver.userId)) throw new Error('driver user already exists')
104
-
105
- const driverUser = await tx.getRepository(User).findOne({ where: { id: transportDriver.userId } })
106
-
107
- return await repository.save({
108
- ...transportDriver,
109
- user: driverUser,
110
- domain,
111
- creator: user,
112
- updater: user
113
- })
114
- }
115
-
116
- export async function updateTransportDriver(
117
- id: string,
118
- patch: TransportDriver | TransportDriverPatch,
119
- domain: Domain,
120
- user: User,
121
- tx?: EntityManager
122
- ): Promise<TransportDriver> {
123
- const repository: Repository<TransportDriver> = tx
124
- ? tx.getRepository(TransportDriver)
125
- : getRepository(TransportDriver)
126
- const transportDriver = await repository.findOne({
127
- where: { domain: { id: domain.id }, id }
128
- })
129
-
130
- return await repository.save({
131
- ...transportDriver,
132
- ...patch,
133
- updater: user
134
- })
135
- }
136
-
137
- export async function deleteTransportDriver(id: string, tx?: EntityManager) {
138
- const repository: Repository<TransportDriver> = tx
139
- ? tx.getRepository(TransportDriver)
140
- : getRepository(TransportDriver)
141
- await repository.delete(id)
142
- return true
143
- }
144
-
145
- export async function deleteTransportDrivers(ids: string[], context: ResolverContext) {
146
- const { tx, user } = context.state
147
-
148
- const transportDrivers = await tx.getRepository(TransportDriver).find({ where: { id: In(ids) } })
149
-
150
- let deletedTransportDrivers: TransportDriver[] = []
151
- deletedTransportDrivers = await Promise.all(
152
- transportDrivers.map((transportDriver: TransportDriver) => {
153
- transportDriver.deletedAt = new Date()
154
- transportDriver.updater = user
155
-
156
- return transportDriver
157
- })
158
- )
159
- await tx.getRepository(TransportDriver).save(deletedTransportDrivers)
160
- return true
161
- }
@@ -1,103 +0,0 @@
1
- import { Arg, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
- import { EntityManager, IsNull } from 'typeorm'
3
-
4
- import { User } from '@things-factory/auth-base'
5
- import { Bizplace } from '@things-factory/biz-base'
6
- import { buildQuery, Domain, Filter, getRepository, Pagination, Sorting } from '@things-factory/shell'
7
-
8
- import { TransportVehicle } from '../transport-vehicle/transport-vehicle'
9
- import { TransportDriver } from './transport-driver'
10
- import { TransportDriverList } from './transport-driver-types'
11
-
12
- @Resolver(TransportDriver)
13
- export class TransportDriverQuery {
14
- @Directive('@transaction')
15
- @Directive('@privilege(category: "transport", privilege: "query", domainOwnerGranted: true)')
16
- @Query(returns => TransportDriverList)
17
- async transportDrivers(
18
- @Ctx() context: ResolverContext,
19
- @Arg('filters', type => [Filter], { nullable: true }) filters?: Filter[],
20
- @Arg('pagination', type => Pagination, { nullable: true }) pagination?: Pagination,
21
- @Arg('sortings', type => [Sorting], { nullable: true }) sortings?: Sorting[]
22
- ): Promise<TransportDriverList> {
23
- const { domain, tx } = context.state
24
-
25
- const queryBuilder = tx.getRepository(TransportDriver).createQueryBuilder()
26
- buildQuery(queryBuilder, { filters, pagination, sortings }, context, {
27
- searchables: ['name', 'userEmail', 'driverCode', 'driverTelNo']
28
- })
29
-
30
- queryBuilder
31
- .leftJoinAndSelect('TransportDriver.domain', 'Domain')
32
- .leftJoinAndSelect('TransportDriver.creator', 'Creator')
33
- .leftJoinAndSelect('TransportDriver.updater', 'Updater')
34
-
35
- if (filters?.length > 0) {
36
- queryBuilder.andWhere('Domain.id = :domainId', { domainId: domain.id }).andWhere('TransportDriver.deletedAt IS NULL')
37
- } else {
38
- queryBuilder.where('TransportDriver.deletedAt IS NULL').andWhere('Domain.id = :domainId', { domainId: domain.id })
39
- }
40
-
41
- const [items, total] = await queryBuilder.getManyAndCount()
42
-
43
- return { items, total }
44
- }
45
-
46
- @Directive('@transaction')
47
- @Directive('@privilege(category: "transport", privilege: "query", domainOwnerGranted: true)')
48
- @Query(returns => TransportDriver)
49
- async transportDriver(@Arg('driverCode') driverCode: string, @Ctx() context: ResolverContext): Promise<TransportDriver> {
50
- const { domain, tx } = context.state
51
-
52
- return await tx.getRepository(TransportDriver).findOne({
53
- where: { domain: { id: domain.id }, driverCode, deletedAt: IsNull() }
54
- })
55
- }
56
-
57
- @Directive('@transaction')
58
- @Query(returns => TransportDriver)
59
- async transportDriverByUser(@Ctx() context: ResolverContext): Promise<TransportDriver> {
60
- const { domain, tx, user }: { domain: Domain; tx?: EntityManager; user: User } = context.state
61
-
62
- const driver = await tx.getRepository(TransportDriver).findOne({
63
- where: { domain: { id: domain.id }, user: { id: user.id } }
64
- })
65
-
66
- return driver
67
- }
68
-
69
- @FieldResolver(type => Domain)
70
- async domain(@Root() transportDriver: TransportDriver): Promise<Domain> {
71
- return await getRepository(Domain).findOneBy({ id: transportDriver.domainId })
72
- }
73
-
74
- @FieldResolver(type => User)
75
- async user(@Root() transportDriver: TransportDriver): Promise<User> {
76
- return await getRepository(User).findOneBy({ id: transportDriver.userId })
77
- }
78
-
79
- @FieldResolver(type => Bizplace)
80
- async bizplace(@Root() transportDriver: TransportDriver): Promise<Bizplace> {
81
- return await getRepository(Bizplace).findOneBy({ id: transportDriver.bizplaceId })
82
- }
83
-
84
- @FieldResolver(type => User)
85
- async updater(@Root() transportDriver: TransportDriver): Promise<User> {
86
- return await getRepository(User).findOneBy({ id: transportDriver.updaterId })
87
- }
88
-
89
- @FieldResolver(type => User)
90
- async creator(@Root() transportDriver: TransportDriver): Promise<User> {
91
- return await getRepository(User).findOneBy({ id: transportDriver.creatorId })
92
- }
93
-
94
- @FieldResolver(type => [TransportVehicle])
95
- async transportVehicles(@Root() transportDriver: TransportDriver): Promise<TransportVehicle[]> {
96
- return await (
97
- await getRepository(TransportDriver).findOne({
98
- where: { id: transportDriver.id },
99
- relations: ['transportVehicles']
100
- })
101
- ).transportVehicles
102
- }
103
- }
@@ -1,75 +0,0 @@
1
- import { Field, InputType, Int, ObjectType } from 'type-graphql'
2
-
3
- import { TransportDriver } from './transport-driver'
4
-
5
- @ObjectType()
6
- export class TransportDriverList {
7
- @Field(type => [TransportDriver])
8
- items: TransportDriver[]
9
-
10
- @Field(type => Int)
11
- total: number
12
- }
13
-
14
- @InputType()
15
- export class NewTransportDriver {
16
- @Field()
17
- name: string
18
-
19
- @Field({ nullable: true })
20
- description?: string
21
-
22
- @Field()
23
- userId: string
24
-
25
- @Field()
26
- driverCode: string
27
-
28
- @Field({ nullable: true })
29
- driverTelNo?: string
30
-
31
- @Field({ nullable: true })
32
- licenseType?: string
33
-
34
- @Field({ nullable: true })
35
- licenseNo?: string
36
-
37
- @Field({ nullable: true })
38
- licContDate?: string
39
-
40
- @Field({ nullable: true })
41
- licExpiDate?: string
42
- }
43
-
44
- @InputType()
45
- export class TransportDriverPatch {
46
- @Field({ nullable: true })
47
- id?: string
48
-
49
- @Field({ nullable: true })
50
- name?: string
51
-
52
- @Field({ nullable: true })
53
- description?: string
54
-
55
- @Field({ nullable: true })
56
- driverCode?: string
57
-
58
- @Field({ nullable: true })
59
- driverTelNo?: string
60
-
61
- @Field({ nullable: true })
62
- licenseType?: string
63
-
64
- @Field({ nullable: true })
65
- licenseNo?: string
66
-
67
- @Field({ nullable: true })
68
- licContDate?: string
69
-
70
- @Field({ nullable: true })
71
- licExpiDate?: string
72
-
73
- @Field({ nullable: true })
74
- cuFlag?: string
75
- }
@@ -1,118 +0,0 @@
1
- import { Field, ID, ObjectType } from 'type-graphql'
2
- import {
3
- Column,
4
- CreateDateColumn,
5
- Entity,
6
- Index,
7
- JoinTable,
8
- ManyToMany,
9
- ManyToOne,
10
- PrimaryGeneratedColumn,
11
- RelationId,
12
- UpdateDateColumn
13
- } from 'typeorm'
14
-
15
- import { User } from '@things-factory/auth-base'
16
- import { Bizplace } from '@things-factory/biz-base'
17
- import { Domain } from '@things-factory/shell'
18
-
19
- import { TransportVehicle } from '../transport-vehicle/transport-vehicle'
20
-
21
- @Entity()
22
- @Index(
23
- 'ix_transport-driver_0',
24
- (transportDriver: TransportDriver) => [transportDriver.domain, transportDriver.driverCode, transportDriver.id],
25
- {
26
- unique: true
27
- }
28
- )
29
- @ObjectType()
30
- export class TransportDriver {
31
- @PrimaryGeneratedColumn('uuid')
32
- @Field(type => ID)
33
- readonly id: string
34
-
35
- @ManyToOne(type => Domain)
36
- @Field(type => Domain)
37
- domain: Domain
38
-
39
- @RelationId((transportDriver: TransportDriver) => transportDriver.domain)
40
- domainId: string
41
-
42
- @ManyToOne(type => Bizplace, { nullable: true })
43
- @Field(type => Bizplace, { nullable: true })
44
- bizplace?: Bizplace
45
-
46
- @RelationId((transportDriver: TransportDriver) => transportDriver.bizplace)
47
- bizplaceId?: string
48
-
49
- @ManyToOne(type => User)
50
- @Field(type => User)
51
- user: User
52
-
53
- @RelationId((transportDriver: TransportDriver) => transportDriver.user)
54
- userId: string
55
-
56
- @Column()
57
- @Field()
58
- name: string
59
-
60
- @Column()
61
- @Field()
62
- driverCode: string
63
-
64
- @ManyToMany(type => TransportVehicle, transportVehicle => transportVehicle.transportDrivers)
65
- @JoinTable({ name: 'drivers_vehicles' })
66
- @Field(type => [TransportVehicle], { nullable: true })
67
- transportVehicles: TransportVehicle[]
68
-
69
- @Column({ nullable: true })
70
- @Field({ nullable: true })
71
- driverTelNo: string
72
-
73
- @Column({ nullable: true })
74
- @Field({ nullable: true })
75
- liceseType: string
76
-
77
- @Column({ nullable: true })
78
- @Field({ nullable: true })
79
- licenseNo: string
80
-
81
- @Column({ nullable: true })
82
- @Field({ nullable: true })
83
- licContDate: string
84
-
85
- @Column({ nullable: true })
86
- @Field({ nullable: true })
87
- licExpiDate: string
88
-
89
- @Column({ nullable: true })
90
- @Field({ nullable: true })
91
- description: string
92
-
93
- @ManyToOne(type => User)
94
- @Field(type => User, { nullable: true })
95
- creator: User
96
-
97
- @RelationId((transportDriver: TransportDriver) => transportDriver.creator)
98
- creatorId: string
99
-
100
- @ManyToOne(type => User)
101
- @Field(type => User, { nullable: true })
102
- updater: User
103
-
104
- @RelationId((transportDriver: TransportDriver) => transportDriver.updater)
105
- updaterId: string
106
-
107
- @CreateDateColumn()
108
- @Field()
109
- createdAt: Date
110
-
111
- @UpdateDateColumn()
112
- @Field()
113
- updatedAt: Date
114
-
115
- @Column({ nullable: true })
116
- @Field({ nullable: true })
117
- deletedAt: Date
118
- }
@@ -1,6 +0,0 @@
1
- import { TransportVehicle } from './transport-vehicle'
2
- import { TransportVehicleMutation } from './transport-vehicle-mutation'
3
- import { TransportVehicleQuery } from './transport-vehicle-query'
4
-
5
- export const entities = [TransportVehicle]
6
- export const resolvers = [TransportVehicleQuery, TransportVehicleMutation]
@@ -1,213 +0,0 @@
1
- import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
2
- import { EntityManager, In, Repository } from 'typeorm'
3
-
4
- import { User } from '@things-factory/auth-base'
5
- import { Domain, getRepository } from '@things-factory/shell'
6
-
7
- import { NewTransportVehicle, TransportVehiclePatch } from '../'
8
- import { TransportDriver } from '../transport-driver/transport-driver'
9
- import { TransportVehicle } from './transport-vehicle'
10
-
11
- const debug = require('debug')('things-factory:operato-wms:addTransportVehicle')
12
-
13
- @Resolver(TransportVehicle)
14
- export class TransportVehicleMutation {
15
- @Directive('@transaction')
16
- @Directive('@privilege(category: "transport", privilege: "mutation")')
17
- @Mutation(returns => TransportVehicle)
18
- async createTransportVehicle(
19
- @Arg('transportVehicle', type => NewTransportVehicle) transportVehicle: NewTransportVehicle,
20
- @Ctx() context: ResolverContext
21
- ): Promise<TransportVehicle> {
22
- const { tx, domain, user } = context.state
23
-
24
- return await createTransportVehicle(transportVehicle, domain, user, tx)
25
- }
26
-
27
- @Directive('@transaction')
28
- @Directive('@privilege(category: "transport", privilege: "mutation")')
29
- @Mutation(returns => [TransportVehicle])
30
- async updateTransportVehicle(
31
- @Arg('patch', type => TransportVehiclePatch) patch: TransportVehiclePatch,
32
- @Ctx() context: ResolverContext
33
- ): Promise<TransportVehicle> {
34
- const { tx, domain, user } = context.state
35
-
36
- return await updateTransportVehicle(patch, domain, user, tx)
37
- }
38
-
39
- @Directive('@transaction')
40
- @Directive('@privilege(category: "transport", privilege: "mutation")')
41
- @Mutation(returns => [TransportVehicle])
42
- async updateMultipleTransportVehicle(
43
- @Arg('patches', type => [TransportVehiclePatch]) patches: TransportVehiclePatch[],
44
- @Ctx() context: ResolverContext
45
- ): Promise<TransportVehicle[]> {
46
- const { tx, domain, user } = context.state
47
-
48
- let results = []
49
- const _createRecords = patches.filter((patch: any) => patch.cuFlag === '+')
50
- const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
51
-
52
- if (_createRecords.length > 0) {
53
- for (let i = 0; i < _createRecords.length; i++) {
54
- const patch: TransportVehiclePatch = _createRecords[i]
55
- const result = await createTransportVehicle(patch, domain, user, tx)
56
- results.push({ ...result, cuFlag: '+' })
57
- }
58
- }
59
-
60
- if (_updateRecords.length > 0) {
61
- for (let i = 0; i < _updateRecords.length; i++) {
62
- const patch: TransportVehiclePatch = _updateRecords[i]
63
- const result = await updateTransportVehicle(patch, domain, user, tx)
64
- results.push({ ...result, cuFlag: 'M' })
65
- }
66
- }
67
-
68
- return results
69
- }
70
-
71
- @Directive('@transaction')
72
- @Directive('@privilege(category: "transport", privilege: "mutation")')
73
- @Mutation(returns => Boolean)
74
- async deleteTransportVehicle(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
75
- const { tx } = context.state
76
-
77
- return await deleteTransportVehicle(id, tx)
78
- }
79
-
80
- @Directive('@transaction')
81
- @Directive('@privilege(category: "transport", privilege: "mutation")')
82
- @Mutation(returns => Boolean)
83
- async deleteTransportVehicles(
84
- @Arg('ids', type => [String]) ids: string[],
85
- @Ctx() context: ResolverContext
86
- ): Promise<boolean> {
87
- return await deleteTransportVehicles(ids, context)
88
- }
89
-
90
- @Directive('@transaction')
91
- @Directive('@privilege(category: "transport", privilege: "mutation")')
92
- @Mutation(returns => TransportVehicle)
93
- async addTransportVehicleDriver(
94
- @Arg('id') id: string,
95
- @Arg('driverId', type => String) driverId: string,
96
- @Ctx() context: ResolverContext
97
- ): Promise<TransportVehicle> {
98
- const { domain, user, tx } = context.state
99
- const transportVehicleRepo = tx.getRepository(TransportVehicle)
100
- const transportVehicle = await transportVehicleRepo.findOne({
101
- where: { domain: { id: domain.id }, id },
102
- relations: ['domain', 'transportDrivers']
103
- })
104
-
105
- if (!transportVehicle) throw new Error('Failed to find vehicle')
106
-
107
- transportVehicle.transportDrivers = []
108
-
109
- const newDriver = await tx
110
- .getRepository(TransportDriver)
111
- .findOne({ where: { id: driverId, domain: { id: domain.id } } })
112
- if (!newDriver) throw new Error('driver not found')
113
-
114
- transportVehicle.transportDrivers.push(newDriver)
115
-
116
- return await transportVehicleRepo.save({
117
- ...transportVehicle,
118
- updater: user
119
- })
120
- }
121
-
122
- @Directive('@transaction')
123
- @Directive('@privilege(category: "transport", privilege: "mutation")')
124
- @Mutation(returns => TransportVehicle)
125
- async deleteTransportVehicleDrivers(
126
- @Arg('vehicleId') vehicleId: string,
127
- @Arg('ids', type => [String]) ids: string[],
128
- @Ctx() context: ResolverContext
129
- ): Promise<TransportVehicle> {
130
- const { domain, user, tx } = context.state
131
- const transportVehicleRepo = tx.getRepository(TransportVehicle)
132
- const transportVehicle = await transportVehicleRepo.findOne({
133
- where: { domain: { id: domain.id }, id: vehicleId },
134
- relations: ['domain', 'transportDrivers']
135
- })
136
-
137
- if (!transportVehicle) throw new Error('Failed to find vehicle')
138
-
139
- const existedDriverIds: string[] = transportVehicle.transportDrivers.map(transportDriver => transportDriver.id)
140
- const newDriverIds: string[] = existedDriverIds.filter(existedDriverId => !ids.includes(existedDriverId))
141
-
142
- return await transportVehicleRepo.save({
143
- ...transportVehicle,
144
- transportDrivers: await getRepository(TransportDriver).findByIds(newDriverIds),
145
- updater: user
146
- })
147
- }
148
- }
149
-
150
- export async function createTransportVehicle(
151
- transportVehicle: TransportVehicle | NewTransportVehicle,
152
- domain: Domain,
153
- user: User,
154
- tx?: EntityManager
155
- ) {
156
- const repository: Repository<TransportVehicle> = tx
157
- ? tx.getRepository(TransportVehicle)
158
- : getRepository(TransportVehicle)
159
- return await repository.save({
160
- ...transportVehicle,
161
- regNumber: transportVehicle.name,
162
- domain,
163
- creator: user,
164
- updater: user
165
- })
166
- }
167
-
168
- export async function updateTransportVehicle(
169
- patch: TransportVehicle | TransportVehiclePatch,
170
- domain: Domain,
171
- user: User,
172
- tx?: EntityManager
173
- ): Promise<TransportVehicle> {
174
- const repository: Repository<TransportVehicle> = tx
175
- ? tx.getRepository(TransportVehicle)
176
- : getRepository(TransportVehicle)
177
- const transportVehicle = await repository.findOne({
178
- where: { domain: { id: domain.id }, id: patch.id }
179
- })
180
-
181
- return await repository.save({
182
- ...transportVehicle,
183
- ...patch,
184
- regNumber: patch.name,
185
- updater: user
186
- })
187
- }
188
-
189
- export async function deleteTransportVehicle(id: string, tx?: EntityManager) {
190
- const repository: Repository<TransportVehicle> = tx
191
- ? tx.getRepository(TransportVehicle)
192
- : getRepository(TransportVehicle)
193
- await repository.delete(id)
194
- return true
195
- }
196
-
197
- export async function deleteTransportVehicles(ids: string[], context: ResolverContext) {
198
- const { tx, user } = context.state
199
-
200
- const transportVehicles = await tx.getRepository(TransportVehicle).find({ where: { id: In(ids) } })
201
-
202
- let deletedTransportVehicles: TransportVehicle[] = []
203
- deletedTransportVehicles = await Promise.all(
204
- transportVehicles.map((transportVehicle: TransportVehicle) => {
205
- transportVehicle.deletedAt = new Date()
206
- transportVehicle.updater = user
207
-
208
- return transportVehicle
209
- })
210
- )
211
- await tx.getRepository(TransportVehicle).save(deletedTransportVehicles)
212
- return true
213
- }
@@ -1,96 +0,0 @@
1
- import { Arg, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
- import { IsNull } from 'typeorm'
3
-
4
- import { User } from '@things-factory/auth-base'
5
- import { Bizplace } from '@things-factory/biz-base'
6
- import { buildQuery, Domain, Filter, getRepository, Pagination, Sorting } from '@things-factory/shell'
7
-
8
- import { TransportVehicleList } from '../'
9
- import { TransportDriver } from '../transport-driver/transport-driver'
10
- import { TransportVehicle } from './transport-vehicle'
11
-
12
- @Resolver(TransportVehicle)
13
- export class TransportVehicleQuery {
14
- @Directive('@transaction')
15
- @Directive('@privilege(category: "transport", privilege: "query", domainOwnerGranted: true)')
16
- @Query(returns => TransportVehicleList)
17
- async transportVehicles(
18
- @Ctx() context: ResolverContext,
19
- @Arg('filters', type => [Filter], { nullable: true }) filters?: [Filter],
20
- @Arg('pagination', type => Pagination, { nullable: true }) pagination?: Pagination,
21
- @Arg('sortings', type => [Sorting], { nullable: true }) sortings?: [Sorting]
22
- ): Promise<TransportVehicleList> {
23
- const { domain, tx } = context.state
24
-
25
- const queryBuilder = tx.getRepository(TransportVehicle).createQueryBuilder()
26
- buildQuery(queryBuilder, { filters, pagination, sortings }, context, {
27
- searchables: ['name', 'description', 'size']
28
- })
29
-
30
- queryBuilder
31
- .leftJoinAndSelect('TransportVehicle.domain', 'Domain')
32
- .leftJoinAndSelect('TransportVehicle.creator', 'Creator')
33
- .leftJoinAndSelect('TransportVehicle.updater', 'Updater')
34
-
35
- if (filters?.length > 0) {
36
- queryBuilder
37
- .andWhere('Domain.id = :domainId', { domainId: domain.id })
38
- .andWhere('TransportVehicle.deletedAt IS NULL')
39
- } else {
40
- queryBuilder
41
- .where('TransportVehicle.deletedAt IS NULL')
42
- .andWhere('Domain.id = :domainId', { domainId: domain.id })
43
- }
44
-
45
- const [items, total] = await queryBuilder.getManyAndCount()
46
-
47
- return { items, total }
48
- }
49
-
50
- @Directive('@transaction')
51
- @Directive('@privilege(category: "transport", privilege: "query", domainOwnerGranted: true)')
52
- @Query(returns => TransportVehicle)
53
- async transportVehicleById(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<TransportVehicle> {
54
- const { domain, user, tx } = context.state
55
-
56
- return await tx.getRepository(TransportVehicle).findOne({
57
- where: {
58
- id,
59
- domain: { id: domain.id },
60
- deletedAt: IsNull()
61
- }
62
- })
63
- }
64
-
65
- @FieldResolver(type => Domain)
66
- async domain(@Root() transportVehicle: TransportVehicle): Promise<Domain> {
67
- return await getRepository(Domain).findOneBy({ id: transportVehicle.domainId })
68
- }
69
-
70
- @FieldResolver(type => Bizplace)
71
- async bizplace(@Root() transportVehicle: TransportVehicle): Promise<Bizplace> {
72
- return await getRepository(Bizplace).findOneBy({ id: transportVehicle.bizplaceId })
73
- }
74
-
75
- @FieldResolver(type => User)
76
- async updater(@Root() transportVehicle: TransportVehicle): Promise<User> {
77
- return await getRepository(User).findOneBy({ id: transportVehicle.updaterId })
78
- }
79
-
80
- @FieldResolver(type => User)
81
- async creator(@Root() transportVehicle: TransportVehicle): Promise<User> {
82
- return await getRepository(User).findOneBy({ id: transportVehicle.creatorId })
83
- }
84
-
85
- @FieldResolver(type => [TransportDriver])
86
- async transportDrivers(@Root() transportVehicle: TransportVehicle): Promise<TransportDriver[]> {
87
- return await (
88
- await getRepository(TransportVehicle).findOne({
89
- where: {
90
- id: transportVehicle.id
91
- },
92
- relations: ['transportDrivers']
93
- })
94
- ).transportDrivers
95
- }
96
- }
@@ -1,53 +0,0 @@
1
- import { Field, InputType, Int, ObjectType } from 'type-graphql'
2
- import { TransportVehicle } from './transport-vehicle'
3
-
4
- @ObjectType()
5
- export class TransportVehicleList {
6
- @Field(type => [TransportVehicle])
7
- items: TransportVehicle[]
8
-
9
- @Field(type => Int)
10
- total: number
11
- }
12
-
13
- @InputType()
14
- export class NewTransportVehicle {
15
- @Field()
16
- name: string
17
-
18
- @Field()
19
- regNumber: string
20
-
21
- @Field()
22
- size: string
23
-
24
- @Field()
25
- status: string
26
-
27
- @Field({ nullable: true })
28
- description: string
29
- }
30
-
31
- @InputType()
32
- export class TransportVehiclePatch {
33
- @Field({ nullable: true })
34
- id: string
35
-
36
- @Field({ nullable: true })
37
- name: string
38
-
39
- @Field({ nullable: true })
40
- regNumber: string
41
-
42
- @Field({ nullable: true })
43
- size: string
44
-
45
- @Field({ nullable: true })
46
- status: string
47
-
48
- @Field({ nullable: true })
49
- description: string
50
-
51
- @Field({ nullable: true })
52
- cuFlag: string
53
- }
@@ -1,111 +0,0 @@
1
- import { Field, ID, ObjectType } from 'type-graphql'
2
- import {
3
- Column,
4
- CreateDateColumn,
5
- Entity,
6
- Index,
7
- ManyToMany,
8
- ManyToOne,
9
- PrimaryGeneratedColumn,
10
- RelationId,
11
- UpdateDateColumn
12
- } from 'typeorm'
13
-
14
- import { User } from '@things-factory/auth-base'
15
- import { Bizplace } from '@things-factory/biz-base'
16
- import { Domain } from '@things-factory/shell'
17
-
18
- import { TransportDriver } from '../transport-driver/transport-driver'
19
-
20
- @Entity()
21
- @Index(
22
- 'ix_transport-vehicle_0',
23
- (transportVehicle: TransportVehicle) => [transportVehicle.domain, transportVehicle.name],
24
- { unique: true }
25
- )
26
- @ObjectType()
27
- export class TransportVehicle {
28
- @PrimaryGeneratedColumn('uuid')
29
- @Field(type => ID)
30
- readonly id: string
31
-
32
- @ManyToOne(type => Domain, { nullable: false })
33
- @Field(type => Domain)
34
- domain: Domain
35
-
36
- @RelationId((transportVehicle: TransportVehicle) => transportVehicle.domain)
37
- domainId: string
38
-
39
- @ManyToOne(type => Bizplace, { nullable: true })
40
- @Field(type => Bizplace, { nullable: true })
41
- bizplace?: Bizplace
42
-
43
- @RelationId((transportVehicle: TransportVehicle) => transportVehicle.bizplace)
44
- bizplaceId?: string
45
-
46
- @Column()
47
- @Field()
48
- name: string
49
-
50
- @ManyToMany(type => TransportDriver, transportDriver => transportDriver.transportVehicles)
51
- @Field(type => [TransportDriver], { nullable: true })
52
- transportDrivers: TransportDriver[]
53
-
54
- @Column()
55
- @Field()
56
- regNumber: string
57
-
58
- @Column({ comment: '1ton, 3ton, 5ton, 8ton, 10ton' })
59
- @Field()
60
- size: string
61
-
62
- @Column()
63
- @Field()
64
- status: string
65
-
66
- @Column({ nullable: true })
67
- @Field({ nullable: true })
68
- description: string
69
-
70
- @Column({ nullable: true })
71
- @Field({ nullable: true })
72
- ownerType: string
73
-
74
- @Column({ nullable: true })
75
- @Field({ nullable: true })
76
- serviceStartDate: Date
77
-
78
- @Column({ nullable: true })
79
- @Field({ nullable: true })
80
- serviceEndDate: Date
81
-
82
- @Column({ nullable: true })
83
- @Field({ nullable: true })
84
- isEnabled: boolean
85
-
86
- @ManyToOne(type => User)
87
- @Field(type => User, { nullable: true })
88
- creator: User
89
-
90
- @RelationId((transportVehicle: TransportVehicle) => transportVehicle.creator)
91
- creatorId: string
92
-
93
- @ManyToOne(type => User)
94
- @Field(type => User, { nullable: true })
95
- updater: User
96
-
97
- @RelationId((transportVehicle: TransportVehicle) => transportVehicle.updater)
98
- updaterId: string
99
-
100
- @CreateDateColumn()
101
- @Field()
102
- createdAt: Date
103
-
104
- @UpdateDateColumn()
105
- @Field()
106
- updatedAt: Date
107
-
108
- @Column({ nullable: true })
109
- @Field({ nullable: true })
110
- deletedAt: Date
111
- }