Skip to content

Commit 0ff29b9

Browse files
committed
lint: lib/realtime/realtime
- add more typing annotate - add some references to models
1 parent 863337d commit 0ff29b9

File tree

5 files changed

+94
-24
lines changed

5 files changed

+94
-24
lines changed

lib/models/author.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
// external modules
22

33
import {Model, DataTypes} from "sequelize";
4-
import {MySequelize, AuthorAttributes, ModelObj} from "./baseModel";
4+
import {MySequelize, AuthorAttributes, ModelObj, UserModel} from "./baseModel";
55

66
export class Author extends Model<AuthorAttributes> implements AuthorAttributes {
77
color: string;
88
id: string;
99

10+
userId?: string
11+
user?: UserModel
12+
1013
static initialize(sequelize: MySequelize): void {
1114
Author.init(
1215
{

lib/models/note.ts

+2
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ export class Note extends Model<NoteAttributes> implements NoteAttributes {
4747

4848
ownerId: string
4949

50+
lastchangeuserId?: string
51+
5052
static initialize(sequelize: MySequelize): void {
5153
Note.init({
5254
id: {

lib/realtime/realtime.ts

+82-19
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@ import config from "../config";
1414
import {logger} from "../logger";
1515
import * as history from "../history";
1616
import {Author, Note, User} from "../models";
17+
import {UserProfile} from "../models/baseModel";
1718

1819
// ot
1920
import ot from "ot";
2021

2122
import {ProcessQueue} from "./processQueue";
22-
import {RealtimeClientConnection} from "./realtimeClientConnection";
23+
import {CursorData, RealtimeClientConnection} from "./realtimeClientConnection";
2324
import {UpdateDirtyNoteJob} from "./realtimeUpdateDirtyNoteJob";
2425
import {CleanDanglingUserJob} from "./realtimeCleanDanglingUserJob";
2526
import {SaveRevisionJob} from "./realtimeSaveRevisionJob";
@@ -40,6 +41,42 @@ export interface RealtimeUserData {
4041
idle?: any
4142
type?: any
4243
}
44+
45+
interface RealtimeAuthorData {
46+
userid: string
47+
color: string
48+
photo: string
49+
name: string
50+
}
51+
52+
export interface RealtimeNoteData {
53+
id: string,
54+
alias?: string,
55+
title?: string,
56+
// owner id
57+
owner?: string,
58+
ownerprofile?: UserProfile
59+
permission?: string
60+
// last change user id
61+
lastchangeuser?: string
62+
lastchangeuserprofile?: UserProfile
63+
64+
socks: SocketIO.Socket[]
65+
users: Record<string, RealtimeUserData>
66+
//???
67+
tempUsers: any
68+
69+
createtime: number
70+
updatetime: number
71+
72+
// type: ot.EditorSocketIOServer
73+
server: any
74+
75+
authors: Record<string, RealtimeAuthorData>
76+
authorship: string
77+
}
78+
79+
4380
const chance = new Chance()
4481

4582
export let io: SocketIO.Server = null
@@ -98,7 +135,7 @@ export function secure(socket: SocketIO.Socket, next: (err?: Error | null) => vo
98135

99136
// TODO: only use in `updateDirtyNote`
100137
// TODO: test it
101-
export function emitCheck(note) {
138+
export function emitCheck(note: RealtimeNoteData): void {
102139
const out = {
103140
title: note.title,
104141
updatetime: note.updatetime,
@@ -111,18 +148,18 @@ export function emitCheck(note) {
111148
}
112149

113150
// actions
114-
export const notes = {}
115151
export const users: Record<string, RealtimeUserData> = {}
152+
export const notes: Record<string, RealtimeNoteData> = {}
116153

117-
export function getNotePool(): any {
154+
export function getNotePool(): Record<string, RealtimeNoteData> {
118155
return notes
119156
}
120157

121158
export function isNoteExistsInPool(noteId: string): boolean {
122159
return !!notes[noteId]
123160
}
124161

125-
export function addNote(note) {
162+
export function addNote(note: RealtimeNoteData): boolean {
126163
if (exports.isNoteExistsInPool(note.id)) return false
127164
notes[note.id] = note
128165
return true
@@ -142,7 +179,7 @@ export function deleteAllNoteFromPool(): void {
142179
})
143180
}
144181

145-
export function getNoteFromNotePool(noteId) {
182+
export function getNoteFromNotePool(noteId: string): RealtimeNoteData | null {
146183
return notes[noteId]
147184
}
148185

@@ -159,7 +196,7 @@ updateDirtyNoteJob.start()
159196
cleanDanglingUserJob.start()
160197
saveRevisionJob.start()
161198

162-
export function disconnectSocketOnNote(note) {
199+
export function disconnectSocketOnNote(note: RealtimeNoteData): void {
163200
note.socks.forEach((sock) => {
164201
if (sock) {
165202
sock.emit('delete')
@@ -170,7 +207,7 @@ export function disconnectSocketOnNote(note) {
170207
})
171208
}
172209

173-
export function updateNote(note, callback) {
210+
export function updateNote(note: RealtimeNoteData, callback: (err: Error | null, note: Note) => void): void {
174211
_updateNoteAsync(note).then(_note => {
175212
callback(null, _note)
176213
}).catch((err) => {
@@ -179,15 +216,15 @@ export function updateNote(note, callback) {
179216
})
180217
}
181218

182-
function findNoteByIdAsync(id) {
219+
function findNoteByIdAsync(id: string): Promise<Note> {
183220
return Note.findOne({
184221
where: {
185222
id: id
186223
}
187224
})
188225
}
189226

190-
function updateHistoryForEveryUserCollaborateNote(note) {
227+
function updateHistoryForEveryUserCollaborateNote(note: RealtimeNoteData): void {
191228
// update history to every user in this note
192229
const tempUsers = Object.assign({}, note.tempUsers)
193230
note.tempUsers = {}
@@ -197,7 +234,7 @@ function updateHistoryForEveryUserCollaborateNote(note) {
197234
})
198235
}
199236

200-
async function getUserProfileByIdAsync(id) {
237+
async function getUserProfileByIdAsync(id: string): Promise<UserProfile> {
201238
const user = await User.findOne({
202239
where: {
203240
id: id
@@ -237,7 +274,7 @@ function buildNoteUpdateData(note) {
237274
}
238275
}
239276

240-
async function _updateNoteAsync(note) {
277+
async function _updateNoteAsync(note: RealtimeNoteData) {
241278
let noteModel = await findNoteByIdAsync(note.id)
242279
if (!noteModel) return null
243280

@@ -247,7 +284,7 @@ async function _updateNoteAsync(note) {
247284
note.lastchangeuserprofile = await getLastChangeUserProfileAsync(
248285
note.lastchangeuser,
249286
noteModel.lastchangeuserId,
250-
noteModel.lastchangeuserprofile
287+
note.lastchangeuser
251288
)
252289
} catch (err) {
253290
if (err instanceof UserNotFoundException) {
@@ -262,8 +299,22 @@ async function _updateNoteAsync(note) {
262299
return noteModel
263300
}
264301

302+
interface StatusData {
303+
onlineNotes: number
304+
onlineUsers: number
305+
distinctOnlineUsers: number
306+
notesCount: number
307+
registeredUsers: number
308+
onlineRegisteredUsers: number
309+
distinctOnlineRegisteredUsers: number
310+
isConnectionBusy: boolean
311+
connectionSocketQueueLength: number
312+
isDisconnectBusy: boolean
313+
disconnectSocketQueueLength: number
314+
}
315+
265316
// TODO: test it
266-
export function getStatus() {
317+
export function getStatus(): Promise<StatusData> {
267318
return Note.count()
268319
.then(function (notecount: number) {
269320
const distinctaddresses = []
@@ -402,7 +453,7 @@ export const parseNoteIdFromSocketAsync = async function (socket: SocketIO.Socke
402453
export function emitOnlineUsers(socket: SocketIO.Socket): void {
403454
const noteId = socket.noteId
404455
if (!noteId || !notes[noteId]) return
405-
const users = []
456+
const users: RealtimeClientUserData[] = []
406457
Object.keys(notes[noteId].users).forEach(function (key) {
407458
const user = notes[noteId].users[key]
408459
if (user) {
@@ -486,10 +537,10 @@ async function fetchFullNoteAsync(noteId: string): Promise<Note> {
486537
})
487538
}
488539

489-
function buildAuthorProfilesFromNote(noteAuthors) {
490-
const authors = {}
540+
function buildAuthorProfilesFromNote(noteAuthors: Author[]): Record<string, RealtimeAuthorData> {
541+
const authors: Record<string, RealtimeAuthorData> = {}
491542
noteAuthors.forEach((author) => {
492-
const profile = User.getProfile(author.user)
543+
const profile = User.getProfile(author.user as User)
493544
if (profile) {
494545
authors[author.userId] = {
495546
userid: author.userId,
@@ -584,7 +635,19 @@ export function queueForDisconnect(socket: SocketIO.Socket): void {
584635
})
585636
}
586637

587-
export function buildUserOutData(user) {
638+
interface RealtimeClientUserData {
639+
id?: string
640+
login?: boolean
641+
userid?: string
642+
photo?: string
643+
color?: string
644+
cursor?: CursorData
645+
name?: string
646+
idle?: boolean
647+
type?: string
648+
}
649+
650+
export function buildUserOutData(user: RealtimeUserData): RealtimeClientUserData {
588651
const out = {
589652
id: user.id,
590653
login: user.login,

lib/realtime/realtimeClientConnection.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {Socket} from "socket.io";
66
import config from "../config";
77
import {Note} from "../models";
88
import {logger} from "../logger";
9-
import {RealtimeUserData} from "./realtime";
9+
import {RealtimeNoteData, RealtimeUserData} from "./realtime";
1010

1111
export type CursorData = Record<string, string>
1212

@@ -91,7 +91,7 @@ export class RealtimeClientConnection {
9191
return get(this.socket, 'request.user.id')
9292
}
9393

94-
getCurrentNote() {
94+
getCurrentNote(): RealtimeNoteData {
9595
if (!this.socket.noteId) return
9696
return this.realtime.getNoteFromNotePool(this.socket.noteId)
9797
}

lib/realtime/realtimeUpdateDirtyNoteJob.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ import moment from "moment";
22

33
import config from "../config";
44
import {logger} from "../logger";
5+
import {Note} from "../models";
56
import {JobWorker} from "./jobWorker";
7+
import {RealtimeNoteData} from "./realtime";
68

79
export class UpdateDirtyNoteJob implements JobWorker {
810
private realtime: any;
@@ -34,7 +36,7 @@ export class UpdateDirtyNoteJob implements JobWorker {
3436
})
3537
}
3638

37-
async updateDirtyNote(note) {
39+
async updateDirtyNote(note: RealtimeNoteData): Promise<void> {
3840
const notes = this.realtime.getNotePool()
3941
if (!note.server.isDirty) return
4042

@@ -66,7 +68,7 @@ export class UpdateDirtyNoteJob implements JobWorker {
6668
}
6769
}
6870

69-
updateNoteAsync(note): Promise<any> {
71+
updateNoteAsync(note: RealtimeNoteData): Promise<Note> {
7072
return new Promise((resolve, reject) => {
7173
this.realtime.updateNote(note, (err, _note) => {
7274
if (err) {

0 commit comments

Comments
 (0)