Add type definition

This commit is contained in:
syuilo 2017-09-08 04:13:01 +09:00
parent bc23ec0a95
commit 3feeaccf59
4 changed files with 57 additions and 4 deletions

View File

@ -6,7 +6,7 @@ import deepEqual = require('deep-equal');
import parse from '../../common/text'; import parse from '../../common/text';
import Post from '../../models/post'; import Post from '../../models/post';
import { isValidText } from '../../models/post'; import { isValidText } from '../../models/post';
import User from '../../models/user'; import { default as User, IUser } from '../../models/user';
import Following from '../../models/following'; import Following from '../../models/following';
import DriveFile from '../../models/drive-file'; import DriveFile from '../../models/drive-file';
import Watching from '../../models/post-watching'; import Watching from '../../models/post-watching';
@ -24,7 +24,7 @@ import config from '../../../conf';
* @param {any} app * @param {any} app
* @return {Promise<any>} * @return {Promise<any>}
*/ */
module.exports = (params, user, app) => new Promise(async (res, rej) => { module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => {
// Get 'text' parameter // Get 'text' parameter
const [text, textErr] = $(params.text).optional.string().pipe(isValidText).$; const [text, textErr] = $(params.text).optional.string().pipe(isValidText).$;
if (textErr) return rej('invalid text'); if (textErr) return rej('invalid text');

View File

@ -1,3 +1,5 @@
import * as mongo from 'mongodb';
import db from '../../db/mongodb'; import db from '../../db/mongodb';
export default db.get('posts') as any; // fuck type definition export default db.get('posts') as any; // fuck type definition
@ -5,3 +7,15 @@ export default db.get('posts') as any; // fuck type definition
export function isValidText(text: string): boolean { export function isValidText(text: string): boolean {
return text.length <= 1000 && text.trim() != ''; return text.length <= 1000 && text.trim() != '';
} }
export type IPost = {
_id: mongo.ObjectID;
created_at: Date;
media_ids: mongo.ObjectID[];
reply_to_id: mongo.ObjectID;
repost_id: mongo.ObjectID;
poll: {}; // todo
text: string;
user_id: mongo.ObjectID;
app_id: mongo.ObjectID;
};

View File

@ -1,4 +1,7 @@
import * as mongo from 'mongodb';
import db from '../../db/mongodb'; import db from '../../db/mongodb';
import { IPost } from './post';
const collection = db.get('users'); const collection = db.get('users');
@ -31,6 +34,39 @@ export function isValidBirthday(birthday: string): boolean {
return typeof birthday == 'string' && /^([0-9]{4})\-([0-9]{2})-([0-9]{2})$/.test(birthday); return typeof birthday == 'string' && /^([0-9]{4})\-([0-9]{2})-([0-9]{2})$/.test(birthday);
} }
export interface IUser { export type IUser = {
_id: mongo.ObjectID;
created_at: Date;
email: string;
followers_count: number;
following_count: number;
links: string[];
name: string; name: string;
} password: string;
posts_count: number;
drive_capacity: number;
username: string;
username_lower: string;
token: string;
avatar_id: mongo.ObjectID;
banner_id: mongo.ObjectID;
data: any;
twitter: {
access_token: string;
access_token_secret: string;
user_id: string;
screen_name: string;
};
description: string;
profile: {
location: string;
birthday: string; // 'YYYY-MM-DD'
tags: string[];
};
last_used_at: Date;
latest_post: IPost;
pinned_post_id: mongo.ObjectID;
is_pro: boolean;
is_suspended: boolean;
keywords: string[];
};

3
src/utils/type.ts Normal file
View File

@ -0,0 +1,3 @@
// https://github.com/Microsoft/TypeScript/issues/12215
export type Diff<T extends string, U extends string> = ({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T];
export type Omit<T, K extends keyof T> = { [P in Diff<keyof T, K>]: T[P] };