Edit mapping types to use constants
This commit is contained in:
parent
6b723db5a1
commit
8ba2ce4cab
27
src/Entities.ts
Normal file
27
src/Entities.ts
Normal file
@ -0,0 +1,27 @@
|
||||
export const enum Entity {
|
||||
Users = 'users',
|
||||
Rooms = 'rooms',
|
||||
Messages = 'messages',
|
||||
}
|
||||
|
||||
type EntityConfig = {
|
||||
filename: string
|
||||
mappingType: number
|
||||
}
|
||||
|
||||
export const entities: {
|
||||
[key in Entity]: EntityConfig
|
||||
} = {
|
||||
users: {
|
||||
filename: 'users.json',
|
||||
mappingType: 0,
|
||||
},
|
||||
rooms: {
|
||||
filename: 'rocketchat_room.json',
|
||||
mappingType: 1,
|
||||
},
|
||||
messages: {
|
||||
filename: 'rocketchat_message.json',
|
||||
mappingType: 2,
|
||||
},
|
||||
} as const
|
||||
39
src/app.ts
39
src/app.ts
@ -7,51 +7,26 @@ import { handle as handleUser } from './handlers/users'
|
||||
import log from './helpers/logger'
|
||||
import { initStorage } from './helpers/storage'
|
||||
import { whoami } from './helpers/synapse'
|
||||
import { Entity, entities } from './Entities'
|
||||
|
||||
log.info('rocketchat2matrix starts.')
|
||||
|
||||
const enum Entities {
|
||||
Users = 'users',
|
||||
Rooms = 'rooms',
|
||||
Messages = 'messages',
|
||||
}
|
||||
|
||||
type EntityConfig = {
|
||||
filename: string
|
||||
mappingType: number
|
||||
}
|
||||
|
||||
const entities: { [key in Entities]: EntityConfig } = {
|
||||
users: {
|
||||
filename: 'users.json',
|
||||
mappingType: 0,
|
||||
},
|
||||
rooms: {
|
||||
filename: 'rocketchat_room.json',
|
||||
mappingType: 1,
|
||||
},
|
||||
messages: {
|
||||
filename: 'rocketchat_message.json',
|
||||
mappingType: 2,
|
||||
},
|
||||
}
|
||||
|
||||
async function loadRcExport(entity: Entities) {
|
||||
async function loadRcExport(entity: Entity) {
|
||||
const rl = new lineByLine(`./inputs/${entities[entity].filename}`)
|
||||
|
||||
let line: false | Buffer
|
||||
while ((line = rl.next())) {
|
||||
const item = JSON.parse(line.toString())
|
||||
switch (entity) {
|
||||
case Entities.Users:
|
||||
case Entity.Users:
|
||||
await handleUser(item)
|
||||
break
|
||||
|
||||
case Entities.Rooms:
|
||||
case Entity.Rooms:
|
||||
await handleRoom(item)
|
||||
break
|
||||
|
||||
case Entities.Messages:
|
||||
case Entity.Messages:
|
||||
log.debug(`Message: ${item.name}`)
|
||||
break
|
||||
|
||||
@ -66,9 +41,9 @@ async function main() {
|
||||
await whoami()
|
||||
await initStorage()
|
||||
log.info('Parsing users')
|
||||
await loadRcExport(Entities.Users)
|
||||
await loadRcExport(Entity.Users)
|
||||
log.info('Parsing rooms')
|
||||
await loadRcExport(Entities.Rooms)
|
||||
await loadRcExport(Entity.Rooms)
|
||||
log.info('Done.')
|
||||
} catch (error) {
|
||||
log.error(`Encountered an error while booting up: ${error}`, error)
|
||||
|
||||
@ -17,6 +17,7 @@ import {
|
||||
createDirectChatMemberships,
|
||||
registerRoom,
|
||||
} from './rooms'
|
||||
import { Entity, entities } from '../Entities'
|
||||
|
||||
jest.mock('axios')
|
||||
const mockedAxios = axios as jest.Mocked<typeof axios>
|
||||
@ -177,7 +178,7 @@ test('accepting invitation by joining the room', async () => {
|
||||
rcId: 'whatever',
|
||||
matrixId: 'Neo',
|
||||
accessToken: 'secretAuthToken',
|
||||
type: 0,
|
||||
type: entities[Entity.Users].mappingType,
|
||||
},
|
||||
room_id
|
||||
)
|
||||
@ -202,7 +203,7 @@ test('filtering members', async () => {
|
||||
return {
|
||||
rcId,
|
||||
matrixId: `@${rcId}:matrix`,
|
||||
type: type || 0,
|
||||
type: type || entities[Entity.Users].mappingType,
|
||||
accessToken: 'accessToken',
|
||||
}
|
||||
}
|
||||
@ -215,9 +216,18 @@ test('filtering members', async () => {
|
||||
mockMapping('existingUser'),
|
||||
mockMapping('otherExistingUser'),
|
||||
])
|
||||
expect(mockedStorage.getMapping).toBeCalledWith('existingUser', 0)
|
||||
expect(mockedStorage.getMapping).toBeCalledWith('otherExistingUser', 0)
|
||||
expect(mockedStorage.getMapping).toBeCalledWith('excludedUser', 0)
|
||||
expect(mockedStorage.getMapping).toBeCalledWith(
|
||||
'existingUser',
|
||||
entities[Entity.Users].mappingType
|
||||
)
|
||||
expect(mockedStorage.getMapping).toBeCalledWith(
|
||||
'otherExistingUser',
|
||||
entities[Entity.Users].mappingType
|
||||
)
|
||||
expect(mockedStorage.getMapping).toBeCalledWith(
|
||||
'excludedUser',
|
||||
entities[Entity.Users].mappingType
|
||||
)
|
||||
})
|
||||
|
||||
test('creating mapping', async () => {
|
||||
@ -227,7 +237,7 @@ test('creating mapping', async () => {
|
||||
expect(mockedStorage.save).toHaveBeenCalledWith({
|
||||
rcId: rcPublicRoom._id,
|
||||
matrixId: room_id,
|
||||
type: 1,
|
||||
type: entities[Entity.Rooms].mappingType,
|
||||
accessToken: undefined,
|
||||
} as IdMapping)
|
||||
})
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import { Entity, entities } from '../Entities'
|
||||
import { IdMapping } from '../entity/IdMapping'
|
||||
import log from '../helpers/logger'
|
||||
import {
|
||||
@ -193,7 +194,7 @@ export async function createMapping(
|
||||
const roomMapping = new IdMapping()
|
||||
roomMapping.rcId = rcId
|
||||
roomMapping.matrixId = matrixRoom.room_id
|
||||
roomMapping.type = 1
|
||||
roomMapping.type = entities[Entity.Rooms].mappingType
|
||||
|
||||
await save(roomMapping)
|
||||
log.debug('Mapping added:', roomMapping)
|
||||
|
||||
@ -13,6 +13,7 @@ import {
|
||||
userIsExcluded,
|
||||
} from '../handlers/users'
|
||||
import { IdMapping } from '../entity/IdMapping'
|
||||
import { Entity, entities } from '../Entities'
|
||||
|
||||
jest.mock('axios')
|
||||
const mockedAxios = axios as jest.Mocked<typeof axios>
|
||||
@ -104,7 +105,7 @@ test('creating mapping', async () => {
|
||||
expect(mockedStorage.save).toHaveBeenCalledWith({
|
||||
rcId: rcUser._id,
|
||||
matrixId: matrixUser.user_id,
|
||||
type: 0,
|
||||
type: entities[Entity.Users].mappingType,
|
||||
accessToken: matrixUser.access_token,
|
||||
} as IdMapping)
|
||||
})
|
||||
|
||||
@ -3,6 +3,7 @@ import log from '../helpers/logger'
|
||||
import { axios } from '../helpers/synapse'
|
||||
import { createMembership, getUserId, save } from '../helpers/storage'
|
||||
import { IdMapping } from '../entity/IdMapping'
|
||||
import { Entity, entities } from '../Entities'
|
||||
|
||||
export type RcUser = {
|
||||
_id: string
|
||||
@ -99,7 +100,7 @@ export async function createMapping(
|
||||
const mapping = new IdMapping()
|
||||
mapping.rcId = rcId
|
||||
mapping.matrixId = matrixUser.user_id
|
||||
mapping.type = 0
|
||||
mapping.type = entities[Entity.Users].mappingType
|
||||
mapping.accessToken = matrixUser.access_token
|
||||
|
||||
await save(mapping)
|
||||
|
||||
@ -13,11 +13,12 @@ import {
|
||||
} from './storage'
|
||||
import { IdMapping } from '../entity/IdMapping'
|
||||
import { Membership } from '../entity/Membership'
|
||||
import { Entity, entities } from '../Entities'
|
||||
|
||||
const mapping = new IdMapping()
|
||||
mapping.rcId = 'rcId'
|
||||
mapping.matrixId = 'matrixId'
|
||||
mapping.type = 0
|
||||
mapping.type = entities[Entity.Users].mappingType
|
||||
mapping.accessToken = 'accessToken'
|
||||
|
||||
const membership = new Membership()
|
||||
@ -73,7 +74,7 @@ test('get room by id', async () => {
|
||||
const room = new IdMapping()
|
||||
room.rcId = 'rcRoom'
|
||||
room.matrixId = 'matrixRoom'
|
||||
room.type = 1
|
||||
room.type = entities[Entity.Rooms].mappingType
|
||||
await save(room)
|
||||
|
||||
await expect(getRoomId(room.rcId)).resolves.toBe(room.matrixId)
|
||||
@ -84,7 +85,7 @@ test('get message by id', async () => {
|
||||
const message = new IdMapping()
|
||||
message.rcId = 'rcMessage'
|
||||
message.matrixId = 'matrixMessage'
|
||||
message.type = 2
|
||||
message.type = entities[Entity.Messages].mappingType
|
||||
await save(message)
|
||||
|
||||
await expect(getMessageId(message.rcId)).resolves.toBe(message.matrixId)
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import { DataSource } from 'typeorm'
|
||||
import { IdMapping } from '../entity/IdMapping'
|
||||
import { Membership } from '../entity/Membership'
|
||||
import { Entity, entities } from '../Entities'
|
||||
|
||||
const AppDataSource = new DataSource({
|
||||
type: 'sqlite',
|
||||
@ -29,7 +30,7 @@ export async function save(entity: IdMapping | Membership): Promise<void> {
|
||||
}
|
||||
|
||||
export async function getAccessToken(id: string): Promise<string | undefined> {
|
||||
return (await getMapping(id, 0))?.accessToken
|
||||
return (await getMapping(id, entities[Entity.Users].mappingType))?.accessToken
|
||||
}
|
||||
|
||||
export async function createMembership(
|
||||
@ -57,13 +58,14 @@ export async function getMemberships(rcRoomId: string): Promise<string[]> {
|
||||
}
|
||||
|
||||
export async function getUserId(rcId: string): Promise<string | undefined> {
|
||||
return (await getMapping(rcId, 0))?.matrixId
|
||||
return (await getMapping(rcId, entities[Entity.Users].mappingType))?.matrixId
|
||||
}
|
||||
|
||||
export async function getRoomId(rcId: string): Promise<string | undefined> {
|
||||
return (await getMapping(rcId, 1))?.matrixId
|
||||
return (await getMapping(rcId, entities[Entity.Rooms].mappingType))?.matrixId
|
||||
}
|
||||
|
||||
export async function getMessageId(rcId: string): Promise<string | undefined> {
|
||||
return (await getMapping(rcId, 2))?.matrixId
|
||||
return (await getMapping(rcId, entities[Entity.Messages].mappingType))
|
||||
?.matrixId
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user