mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
9628253fd8
Summary: There is a new column in users table called ref (user reference). It holds user's unique reference number that can be used for features that require some kind of ownership logic (like comments). Test Plan: Updated tests Reviewers: georgegevoian, paulfitz Reviewed By: georgegevoian, paulfitz Differential Revision: https://phab.getgrist.com/D3641
77 lines
2.2 KiB
TypeScript
77 lines
2.2 KiB
TypeScript
import {UserOptions} from 'app/common/UserAPI';
|
|
import {nativeValues} from 'app/gen-server/lib/values';
|
|
import {makeId} from 'app/server/lib/idUtils';
|
|
import {BaseEntity, BeforeInsert, Column, Entity, JoinTable, ManyToMany, OneToMany, OneToOne,
|
|
PrimaryGeneratedColumn} from "typeorm";
|
|
|
|
import {Group} from "./Group";
|
|
import {Login} from "./Login";
|
|
import {Organization} from "./Organization";
|
|
|
|
@Entity({name: 'users'})
|
|
export class User extends BaseEntity {
|
|
|
|
@PrimaryGeneratedColumn()
|
|
public id: number;
|
|
|
|
@Column()
|
|
public name: string;
|
|
|
|
@Column({name: 'api_key', type: String, nullable: true})
|
|
// Found how to make a type nullable in this discussion: https://github.com/typeorm/typeorm/issues/2567
|
|
// todo: adds constraint for api_key not to equal ''
|
|
public apiKey: string | null;
|
|
|
|
@Column({name: 'picture', type: String, nullable: true})
|
|
public picture: string | null;
|
|
|
|
@Column({name: 'first_login_at', type: Date, nullable: true})
|
|
public firstLoginAt: Date | null;
|
|
|
|
@OneToOne(type => Organization, organization => organization.owner)
|
|
public personalOrg: Organization;
|
|
|
|
@OneToMany(type => Login, login => login.user)
|
|
public logins: Login[];
|
|
|
|
@ManyToMany(type => Group)
|
|
@JoinTable({
|
|
name: 'group_users',
|
|
joinColumn: {name: 'user_id'},
|
|
inverseJoinColumn: {name: 'group_id'}
|
|
})
|
|
public groups: Group[];
|
|
|
|
@Column({name: 'is_first_time_user', default: false})
|
|
public isFirstTimeUser: boolean;
|
|
|
|
@Column({name: 'options', type: nativeValues.jsonEntityType, nullable: true})
|
|
public options: UserOptions | null;
|
|
|
|
@Column({name: 'connect_id', type: String, nullable: true})
|
|
public connectId: string | null;
|
|
|
|
/**
|
|
* Unique reference for this user. Primarily used as an ownership key in a cell metadata (comments).
|
|
*/
|
|
@Column({name: 'ref', type: String, nullable: false})
|
|
public ref: string;
|
|
|
|
@BeforeInsert()
|
|
public async beforeInsert() {
|
|
if (!this.ref) {
|
|
this.ref = makeId();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get user's email. Returns undefined if logins has not been joined, or no login
|
|
* is available
|
|
*/
|
|
public get loginEmail(): string|undefined {
|
|
const login = this.logins && this.logins[0];
|
|
if (!login) { return undefined; }
|
|
return login.email;
|
|
}
|
|
}
|