diff --git a/README.md b/README.md index 3a7aa2c6..36bf96d2 100644 --- a/README.md +++ b/README.md @@ -76,12 +76,6 @@ Create the database: npm run db:migrations ``` -and to optionally populate it with test data: - -``` -npm run db:seeds -``` - And start the running processes (with necessary environment variables if not defined in `.env`): @@ -116,12 +110,6 @@ database migrations to initialize the database: docker-compose run prereview npm run db:migrations ``` -and then optionally seed the database with a default admin user: - -``` -docker-compose run prereview npm run db:seeds -``` - By default, it runs on [http://localhost:3000](http://localhost:3000), but you can place it behind a proxy such as [Nginx](https://nginx.com) in order to provide TLS support and other features. diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index b782dfe7..04246ab3 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -78,10 +78,6 @@ else if [ $result -ne 0 ]; then init_db - if [ $NODE_ENV == "development" ]; then - echo "Generate seeds" - npm run db:seeds & - fi else echo "Updating database schema" npm run db:migrations diff --git a/package-lock.json b/package-lock.json index 7c1a85ea..cb5f46fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5112,28 +5112,6 @@ } } }, - "@mikro-resources/fixtures": { - "version": "github:throneless-tech/mikro-resources#a2025ee6e5973db2ff499aef5ad2a8f5a91bfbe6", - "from": "github:throneless-tech/mikro-resources#just-fixtures", - "dev": true, - "requires": { - "class-fixtures-factory": "github:throneless-tech/class-fixtures-factory" - }, - "dependencies": { - "class-fixtures-factory": { - "version": "github:throneless-tech/class-fixtures-factory#9ba4fdf09a0772fed3d18f4e59a29d01ad8f5a57", - "from": "github:throneless-tech/class-fixtures-factory", - "dev": true, - "requires": { - "@types/faker": "^4.1.10", - "@types/treeify": "^1.0.0", - "faker": "^4.1.0", - "tinspector": "^2.3.1", - "treeify": "^1.1.0" - } - } - } - }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -6816,14 +6794,6 @@ "@types/node": "*" } }, - "@types/acorn": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.5.tgz", - "integrity": "sha512-603sPiZ4GVRHPvn6vNgEAvJewKsy+zwRWYS2MeIMemgoAtcjlw2G3lALxrb9OPA17J28bkB71R33yXlQbUatCA==", - "requires": { - "@types/estree": "*" - } - }, "@types/babel__core": { "version": "7.1.16", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", @@ -6934,11 +6904,6 @@ "@types/node": "*" } }, - "@types/estree": { - "version": "0.0.46", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", - "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==" - }, "@types/express": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz", @@ -6960,11 +6925,6 @@ "@types/range-parser": "*" } }, - "@types/faker": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/faker/-/faker-4.1.12.tgz", - "integrity": "sha512-0MEyzJrLLs1WaOCx9ULK6FzdCSj2EuxdSP9kvuxxdBEGujZYUOZ4vkPXdgu3dhyg/pOdn7VCatelYX7k0YShlA==" - }, "@types/formidable": { "version": "1.0.32", "resolved": "https://registry.npmjs.org/@types/formidable/-/formidable-1.0.32.tgz", @@ -7275,11 +7235,6 @@ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==" }, - "@types/treeify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/treeify/-/treeify-1.0.0.tgz", - "integrity": "sha512-ONpcZAEYlbPx4EtJwfTyCDQJGUpKf4sEcuySdCVjK5Fj/3vHp5HII1fqa1/+qrsLnpYELCQTfVW/awsGJePoIg==" - }, "@types/umzug": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@types/umzug/-/umzug-2.3.0.tgz", @@ -9052,18 +9007,6 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "class-fixtures-factory": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/class-fixtures-factory/-/class-fixtures-factory-1.6.1.tgz", - "integrity": "sha512-ZsDvCvab66Q/j9w68CGgxG6tA80IvpLuS93c/F0/ZhqgM3fgeg/Mftdyf8MXIBXWTdH2CHt5QNSxZzIesY65pw==", - "requires": { - "@types/faker": "^4.1.10", - "@types/treeify": "^1.0.0", - "faker": "^4.1.0", - "tinspector": "^2.3.1", - "treeify": "^1.1.0" - } - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -11909,11 +11852,6 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, - "faker": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz", - "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=" - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -23607,16 +23545,6 @@ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true }, - "tinspector": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tinspector/-/tinspector-2.3.1.tgz", - "integrity": "sha512-5O1m6QHcP8yA3uk4psTVe2qGvJCWuNl1hA+safJSKUdv8YWKN2jfNbXnJnjWgIcZr9nsZNMtK33yMUSLcBvUaQ==", - "requires": { - "@types/acorn": "4.0.5", - "acorn": "7.1.1", - "reflect-metadata": "^0.1.13" - } - }, "tiny-invariant": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", @@ -23742,11 +23670,6 @@ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true }, - "treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==" - }, "ts-custom-error": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.2.0.tgz", diff --git a/package.json b/package.json index 0a12018a..75fdbcad 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ "db": "mikro-orm", "db:migrations": "node dist/scripts/dbMigrations.js", "db:apiKey": "ts-node src/backend/scripts/dbApiKey.ts", - "db:seeds": "ts-node src/backend/scripts/dbSeeds.ts", "db:init": "node dist/scripts/dbInit.js", "scan:migrations": "barrelsby --delete -l below -d src/backend/db/migrations", "start:backend": "node dist/backend/index.js", @@ -83,7 +82,6 @@ "@mikro-orm/postgresql": "^4.5.4", "@reach/tooltip": "^0.10.5", "anonymus": "^2.0.0", - "class-fixtures-factory": "^1.6.1", "clipboard-copy": "^3.1.0", "combined-stream": "^1.0.8", "commander": "^5.1.0", @@ -159,7 +157,6 @@ }, "devDependencies": { "@mikro-orm/cli": "^4.5.4", - "@mikro-resources/fixtures": "throneless-tech/mikro-resources#just-fixtures", "@parcel/transformer-image": "2.0.0-beta.2", "@parcel/transformer-typescript-tsc": "2.0.0-beta.2", "@parcel/validator-typescript": "2.0.0-beta.2", diff --git a/src/backend/models/entities/Badge.ts b/src/backend/models/entities/Badge.ts index abd70929..25bc47f1 100644 --- a/src/backend/models/entities/Badge.ts +++ b/src/backend/models/entities/Badge.ts @@ -6,7 +6,6 @@ import { Property, Unique, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { BadgeModel } from '../badges'; import { BaseEntity } from './BaseEntity'; import { Persona } from './Persona'; @@ -15,12 +14,10 @@ import { Persona } from './Persona'; export class Badge extends BaseEntity { [EntityRepositoryType]?: BadgeModel; - @Fixture(faker => `${faker.commerce.color()} ${faker.random.word()}`) @Property() @Unique() name!: string; - @Fixture(faker => faker.internet.color()) @Property() color?: string; diff --git a/src/backend/models/entities/BaseEntity.ts b/src/backend/models/entities/BaseEntity.ts index be4bd932..5bcdbca2 100644 --- a/src/backend/models/entities/BaseEntity.ts +++ b/src/backend/models/entities/BaseEntity.ts @@ -1,12 +1,10 @@ import { v4 as uuidv4 } from 'uuid'; import { PrimaryKey, Property, Unique } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; export abstract class BaseEntity { @PrimaryKey({ hidden: true }) id!: number; - @Fixture(() => uuidv4()) @Property({ type: 'string' }) @Unique() uuid = uuidv4(); diff --git a/src/backend/models/entities/Comment.ts b/src/backend/models/entities/Comment.ts index b5ea40f2..38ef756b 100644 --- a/src/backend/models/entities/Comment.ts +++ b/src/backend/models/entities/Comment.ts @@ -5,7 +5,6 @@ import { ManyToOne, Property, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { CommentModel } from '../comments'; import { BaseEntity } from './BaseEntity'; import { FullReview } from './FullReview'; @@ -17,7 +16,6 @@ import { Persona } from './Persona'; export class Comment extends BaseEntity { [EntityRepositoryType]?: CommentModel; - @Fixture(faker => faker.lorem.sentences()) @Property({ columnType: 'text' }) contents!: string; diff --git a/src/backend/models/entities/Community.ts b/src/backend/models/entities/Community.ts index 5ce3b3f8..737d0266 100644 --- a/src/backend/models/entities/Community.ts +++ b/src/backend/models/entities/Community.ts @@ -7,7 +7,6 @@ import { Property, Unique, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { CommunityModel } from '../communities'; import { BaseEntity } from './BaseEntity'; import { Event } from './Event'; @@ -21,29 +20,23 @@ import { User } from './User'; export class Community extends BaseEntity { [EntityRepositoryType]?: CommunityModel; - @Fixture(faker => `${faker.commerce.color()} ${faker.random.word()}`) @Property() @Unique() name!: string; - @Fixture(faker => `${faker.commerce.color()}-${faker.random.word()}`) @Property() @Unique() slug!: string; - @Fixture(faker => faker.lorem.sentences()) @Property({ columnType: 'text', nullable: true }) description?: string; - @Fixture(faker => faker.image.abstract()) @Property({ nullable: true }) banner?: Buffer; - @Fixture(faker => faker.image.abstract()) @Property({ nullable: true }) logo?: Buffer; - @Fixture(faker => faker.internet.userName()) @Property({ nullable: true }) twitter?: string; diff --git a/src/backend/models/entities/Contact.ts b/src/backend/models/entities/Contact.ts index b06f2599..abba4ac4 100644 --- a/src/backend/models/entities/Contact.ts +++ b/src/backend/models/entities/Contact.ts @@ -5,7 +5,6 @@ import { ManyToOne, Property, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { ContactModel } from '../contacts'; import { BaseEntity } from './BaseEntity'; import { User } from './User'; @@ -15,30 +14,24 @@ import { User } from './User'; export class Contact extends BaseEntity { [EntityRepositoryType]?: ContactModel; - @Fixture(() => 'mailto') @Property() schema!: string; - @Fixture(faker => faker.internet.email()) @Property() value!: string; @ManyToOne({ entity: () => User }) identity!: User; - @Fixture(() => false) @Property() isVerified: boolean; - @Fixture(() => false) @Property() isNotified: boolean; - @Fixture(() => false) @Property() isPublic: boolean; - @Fixture(faker => faker.random.alphaNumeric(16)) @Property({ nullable: true }) token?: string; diff --git a/src/backend/models/entities/Event.ts b/src/backend/models/entities/Event.ts index 9cebc721..f06130e5 100644 --- a/src/backend/models/entities/Event.ts +++ b/src/backend/models/entities/Event.ts @@ -4,7 +4,6 @@ import { ManyToOne, Property, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { EventModel } from '../events'; import { BaseEntity } from './BaseEntity'; import { Community } from './Community'; @@ -13,26 +12,21 @@ import { Community } from './Community'; export class Event extends BaseEntity { [EntityRepositoryType]?: EventModel; - @Fixture(faker => `${faker.commerce.color()} ${faker.random.word()}`) @Property() title!: string; - @Fixture(() => new Date()) @Property() start!: Date; - @Fixture(() => new Date()) @Property({ nullable: true }) end?: Date; @Property() isPrivate: boolean = false; - @Fixture(faker => faker.lorem.sentences()) @Property({ columnType: 'text', nullable: true }) description?: string; - @Fixture(faker => faker.internet.url()) @Property({ columnType: 'text', nullable: true }) url?: string; diff --git a/src/backend/models/entities/Expertise.ts b/src/backend/models/entities/Expertise.ts index ca20e60f..27f05629 100644 --- a/src/backend/models/entities/Expertise.ts +++ b/src/backend/models/entities/Expertise.ts @@ -6,7 +6,6 @@ import { Property, Unique, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { ExpertiseModel } from '../expertises'; import { BaseEntity } from './BaseEntity'; import { Persona } from './Persona'; @@ -15,7 +14,6 @@ import { Persona } from './Persona'; export class Expertise extends BaseEntity { [EntityRepositoryType]?: ExpertiseModel; - @Fixture(faker => `${faker.commerce.color()} ${faker.random.word()}`) @Property() @Unique() name!: string; diff --git a/src/backend/models/entities/FullReview.ts b/src/backend/models/entities/FullReview.ts index b0d5dd76..e8642f09 100644 --- a/src/backend/models/entities/FullReview.ts +++ b/src/backend/models/entities/FullReview.ts @@ -8,7 +8,6 @@ import { Property, Unique, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { FullReviewModel } from '../fullReviews'; import { BaseEntity } from './BaseEntity'; import { Comment } from './Comment'; @@ -16,7 +15,6 @@ import { FullReviewDraft } from './FullReviewDraft'; import { Persona } from './Persona'; import { Preprint } from './Preprint'; import { Statement } from './Statement'; -import { createRandomDoi } from '../../utils/ids'; @Entity() export class FullReview extends BaseEntity { @@ -28,7 +26,6 @@ export class FullReview extends BaseEntity { @Property() isFlagged: boolean = false; - @Fixture({ get: () => createRandomDoi() }) @Property({ nullable: true }) @Unique() doi?: string; diff --git a/src/backend/models/entities/FullReviewDraft.ts b/src/backend/models/entities/FullReviewDraft.ts index a0f8715e..37257eb8 100644 --- a/src/backend/models/entities/FullReviewDraft.ts +++ b/src/backend/models/entities/FullReviewDraft.ts @@ -5,7 +5,6 @@ import { ManyToOne, Property, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { FullReviewDraftModel } from '../fullReviewDrafts'; import { BaseEntity } from './BaseEntity'; import { FullReview } from './FullReview'; @@ -18,7 +17,6 @@ export class FullReviewDraft extends BaseEntity { @ManyToOne({ entity: () => FullReview }) parent!: FullReview; - @Fixture(faker => faker.lorem.paragraph()) @Property({ columnType: 'text' }) contents!: string; diff --git a/src/backend/models/entities/Group.ts b/src/backend/models/entities/Group.ts index d0540ef1..972fec73 100644 --- a/src/backend/models/entities/Group.ts +++ b/src/backend/models/entities/Group.ts @@ -6,7 +6,6 @@ import { Property, Unique, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { GroupModel } from '../groups'; import { BaseEntity } from './BaseEntity'; import { User } from './User'; @@ -15,7 +14,6 @@ import { User } from './User'; export class Group extends BaseEntity { [EntityRepositoryType]?: GroupModel; - @Fixture(faker => `${faker.commerce.color()} ${faker.random.word()}`) @Property() @Unique() name!: string; diff --git a/src/backend/models/entities/Key.ts b/src/backend/models/entities/Key.ts index 28bbac07..aabd8403 100644 --- a/src/backend/models/entities/Key.ts +++ b/src/backend/models/entities/Key.ts @@ -4,7 +4,6 @@ import { ManyToOne, Property, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import uuidApiKey from 'uuid-apikey'; import { KeyModel } from '../keys'; import { BaseEntity } from './BaseEntity'; @@ -17,11 +16,9 @@ export class Key extends BaseEntity { @ManyToOne({ entity: () => User }) owner!: User; - @Fixture(faker => faker.random.alphaNumeric(16)) @Property() app!: string; - @Fixture(faker => faker.random.alphaNumeric(16)) @Property() secret!: string; diff --git a/src/backend/models/entities/Persona.ts b/src/backend/models/entities/Persona.ts index e82fcf41..6675ae6c 100644 --- a/src/backend/models/entities/Persona.ts +++ b/src/backend/models/entities/Persona.ts @@ -8,7 +8,6 @@ import { OneToMany, Property, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { PersonaModel } from '../personas'; import { BaseEntity } from './BaseEntity'; import { Badge } from './Badge'; @@ -24,34 +23,27 @@ import { User } from './User'; export class Persona extends BaseEntity { [EntityRepositoryType]?: PersonaModel; - @Fixture(faker => faker.name.findName()) @Property() name!: string; @ManyToOne({ entity: () => User, nullable: true, hidden: true }) identity?: User; - @Fixture(() => false) @Property() isAnonymous!: boolean; - @Fixture(() => false) @Property() isLocked: boolean = false; - @Fixture(() => false) @Property() isFlagged: boolean = false; - @Fixture(faker => faker.lorem.paragraph()) @Property({ columnType: 'text', nullable: true }) bio?: string; - @Fixture(() => 'wT17FWtRIPTQGkGhi0UMSYZhVbQyfms1') @Property({ nullable: true }) avatar?: Buffer; - @Fixture(() => 'image/jpeg') @Property({ nullable: true }) avatar_encoding?: string; diff --git a/src/backend/models/entities/Preprint.ts b/src/backend/models/entities/Preprint.ts index ee63da92..a142dd58 100644 --- a/src/backend/models/entities/Preprint.ts +++ b/src/backend/models/entities/Preprint.ts @@ -8,7 +8,6 @@ import { Property, Unique, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { PreprintModel } from '../preprints'; import { BaseEntity } from './BaseEntity'; import { Community } from './Community'; @@ -16,7 +15,6 @@ import { FullReview } from './FullReview'; import { RapidReview } from './RapidReview'; import { Request } from './Request'; import { Tag } from './Tag'; -import { createRandomDoi } from '../../utils/ids'; @Entity() @Index({ @@ -26,70 +24,53 @@ import { createRandomDoi } from '../../utils/ids'; export class Preprint extends BaseEntity { [EntityRepositoryType]?: PreprintModel; - @Fixture({ get: () => `doi:${createRandomDoi()}` }) @Property() @Unique() handle!: string; - @Fixture(faker => `${faker.commerce.color()} ${faker.random.word()}`) @Property({ columnType: 'text' }) title!: string; - @Fixture(faker => faker.name.findName()) @Property({ columnType: 'text', nullable: true }) authors?: string; - @Fixture(() => true) @Property() isPublished!: boolean; - @Fixture(faker => faker.lorem.paragraph()) @Property({ columnType: 'text', nullable: true }) abstractText?: string; - @Fixture(faker => faker.random.arrayElement(['arxiv', 'biorxiv', 'medrxiv'])) @Property({ nullable: true }) preprintServer?: string; @Property({ nullable: true }) datePosted?: Date; - @Fixture(faker => faker.random.word()) @Property({ nullable: true }) license?: string; - @Fixture(faker => faker.random.word()) @Property({ nullable: true }) publication?: string; - @Fixture(faker => faker.internet.url()) @Property({ nullable: true }) url?: string; - @Fixture(() => 'application/pdf') @Property({ nullable: true }) contentEncoding?: string; - @Fixture( - () => - 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf', - ) @Property({ nullable: true }) contentUrl?: string; - //@Fixture({ ignore: true }) //@Property({ persist: false }) //get fullReviewCount(): number { // return this.fullReviews.count(); //} - //@Fixture({ ignore: true }) //@Property({ persist: false }) //get rapidReviewCount(): number { // return this.rapidReviews.count(); //} - //@Fixture({ ignore: true }) //@Property({ persist: false }) //get requestCount(): number { // return this.requests.count(); diff --git a/src/backend/models/entities/RapidReview.ts b/src/backend/models/entities/RapidReview.ts index 6ee8e57e..fc6f49e2 100644 --- a/src/backend/models/entities/RapidReview.ts +++ b/src/backend/models/entities/RapidReview.ts @@ -6,7 +6,6 @@ import { ManyToOne, Property, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { RapidReviewModel } from '../rapidReviews'; import { BaseEntity } from './BaseEntity'; import { Persona } from './Persona'; @@ -37,59 +36,45 @@ export class RapidReview extends BaseEntity { @Property() isFlagged: boolean = false; - @Fixture({ enum: Checkboxes }) @Enum(() => Checkboxes) ynNovel = Checkboxes.na; - @Fixture({ enum: Checkboxes }) @Enum(() => Checkboxes) ynFuture = Checkboxes.na; - @Fixture({ enum: Checkboxes }) @Enum(() => Checkboxes) ynReproducibility = Checkboxes.na; - @Fixture({ enum: Checkboxes }) @Enum(() => Checkboxes) ynMethods = Checkboxes.na; - @Fixture({ enum: Checkboxes }) @Enum(() => Checkboxes) ynCoherent = Checkboxes.na; - @Fixture({ enum: Checkboxes }) @Enum(() => Checkboxes) ynLimitations = Checkboxes.na; - @Fixture({ enum: Checkboxes }) @Enum(() => Checkboxes) ynEthics = Checkboxes.na; - @Fixture({ enum: Checkboxes }) @Enum(() => Checkboxes) ynNewData = Checkboxes.na; - @Fixture({ enum: Checkboxes }) @Enum(() => Checkboxes) ynRecommend = Checkboxes.na; - @Fixture({ enum: Checkboxes }) @Enum(() => Checkboxes) ynPeerReview = Checkboxes.na; - @Fixture({ enum: Checkboxes }) @Enum(() => Checkboxes) ynAvailableCode = Checkboxes.na; - @Fixture({ enum: Checkboxes }) @Enum(() => Checkboxes) ynAvailableData = Checkboxes.na; - @Fixture(faker => faker.lorem.sentence()) @Property({ columnType: 'text', nullable: true }) linkToData?: string; - @Fixture(faker => faker.lorem.sentence()) @Property({ columnType: 'text', nullable: true }) coi?: string; diff --git a/src/backend/models/entities/Report.ts b/src/backend/models/entities/Report.ts index 1fb1df58..1fa27f9e 100644 --- a/src/backend/models/entities/Report.ts +++ b/src/backend/models/entities/Report.ts @@ -1,4 +1,3 @@ -import { v4 as uuidv4 } from 'uuid'; import { Entity, EntityRepositoryType, @@ -6,7 +5,6 @@ import { ManyToOne, Property, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { ReportModel } from '../reports'; import { BaseEntity } from './BaseEntity'; import { Persona } from './Persona'; @@ -16,22 +14,18 @@ import { Persona } from './Persona'; export class Report extends BaseEntity { [EntityRepositoryType]?: ReportModel; - @Fixture(faker => faker.lorem.sentences()) @Property({ columnType: 'text', nullable: true }) reason?: string; - @Fixture(faker => `${faker.commerce.color()} ${faker.random.word()}`) @Property({ columnType: 'text', nullable: true }) title?: string; @ManyToOne({ entity: () => Persona }) author!: Persona; - @Fixture(() => uuidv4()) @Property() subject!: string; - @Fixture(() => 'comment') @Property() subjectType!: string; diff --git a/src/backend/models/entities/Request.ts b/src/backend/models/entities/Request.ts index db63a0ea..366d8ee7 100644 --- a/src/backend/models/entities/Request.ts +++ b/src/backend/models/entities/Request.ts @@ -5,7 +5,6 @@ import { ManyToOne, Property, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { RequestModel } from '../requests'; import { BaseEntity } from './BaseEntity'; import { Persona } from './Persona'; @@ -23,7 +22,6 @@ export class Request extends BaseEntity { @ManyToOne({ entity: () => Preprint }) preprint!: Preprint; - @Fixture(() => false) @Property() isPreprintAuthor: boolean = false; diff --git a/src/backend/models/entities/Statement.ts b/src/backend/models/entities/Statement.ts index cb26b149..556622d5 100644 --- a/src/backend/models/entities/Statement.ts +++ b/src/backend/models/entities/Statement.ts @@ -5,7 +5,6 @@ import { ManyToOne, Property, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { StatementModel } from '../statements'; import { BaseEntity } from './BaseEntity'; import { FullReview } from './FullReview'; @@ -17,7 +16,6 @@ import { Persona } from './Persona'; export class Statement extends BaseEntity { [EntityRepositoryType]?: StatementModel; - @Fixture(faker => faker.lorem.sentences()) @Property({ columnType: 'text' }) contents!: string; diff --git a/src/backend/models/entities/Tag.ts b/src/backend/models/entities/Tag.ts index 2311529c..b3f34f26 100644 --- a/src/backend/models/entities/Tag.ts +++ b/src/backend/models/entities/Tag.ts @@ -6,7 +6,6 @@ import { Property, Unique, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { TagModel } from '../tags'; import { BaseEntity } from './BaseEntity'; import { Community } from './Community'; @@ -16,12 +15,10 @@ import { Preprint } from './Preprint'; export class Tag extends BaseEntity { [EntityRepositoryType]?: TagModel; - @Fixture(faker => `${faker.commerce.color()} ${faker.random.word()}`) @Property() @Unique() name!: string; - @Fixture(faker => faker.internet.color()) @Property() color?: string; diff --git a/src/backend/models/entities/Template.ts b/src/backend/models/entities/Template.ts index 7933fa19..50208cc5 100644 --- a/src/backend/models/entities/Template.ts +++ b/src/backend/models/entities/Template.ts @@ -6,7 +6,6 @@ import { Property, Unique, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { TemplateModel } from '../templates'; import { BaseEntity } from './BaseEntity'; import { Community } from './Community'; @@ -16,12 +15,10 @@ import { Community } from './Community'; export class Template extends BaseEntity { [EntityRepositoryType]?: TemplateModel; - @Fixture(faker => `${faker.commerce.color()} ${faker.random.word()}`) @Property() @Unique() title!: string; - @Fixture(faker => faker.lorem.sentences()) @Property({ columnType: 'text' }) contents!: string; diff --git a/src/backend/models/entities/User.ts b/src/backend/models/entities/User.ts index 72f6b731..4febb908 100644 --- a/src/backend/models/entities/User.ts +++ b/src/backend/models/entities/User.ts @@ -8,7 +8,6 @@ import { Property, Unique, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { UserModel } from '../users'; import { BaseEntity } from './BaseEntity'; import { Community } from './Community'; @@ -17,13 +16,11 @@ import { Group } from './Group'; import { Persona } from './Persona'; import { Work } from './Work'; import { Key } from './Key'; -import { createRandomOrcid } from '../../utils/orcid'; @Entity() export class User extends BaseEntity { [EntityRepositoryType]?: UserModel; - @Fixture(() => createRandomOrcid()) @Unique() @Property() orcid!: string; @@ -31,7 +28,6 @@ export class User extends BaseEntity { @OneToOne({ entity: () => Persona, nullable: true }) defaultPersona?: Persona; - @Fixture(() => false) @Property() isPrivate?: boolean; diff --git a/src/backend/models/entities/Work.ts b/src/backend/models/entities/Work.ts index f183f0c8..873562c6 100644 --- a/src/backend/models/entities/Work.ts +++ b/src/backend/models/entities/Work.ts @@ -5,40 +5,33 @@ import { ManyToOne, Property, } from '@mikro-orm/core'; -import { Fixture } from 'class-fixtures-factory'; import { WorkModel } from '../works'; import { BaseEntity } from './BaseEntity'; import { User } from './User'; -import { createRandomDoi } from '../../utils/ids'; @Entity() @Index({ properties: ['author'] }) export class Work extends BaseEntity { [EntityRepositoryType]?: WorkModel; - @Fixture(faker => `${faker.commerce.color()} ${faker.random.word()}`) @Property({ columnType: 'text', nullable: true }) title?: string; @ManyToOne({ entity: () => User }) author!: User; - @Fixture(faker => faker.internet.url()) @Property({ columnType: 'text', nullable: true }) url?: string; - @Fixture(faker => faker.random.word()) @Property({ nullable: true }) type?: string; - @Fixture({ get: () => `doi:${createRandomDoi()}` }) @Property({ nullable: true }) handle?: string; @Property({ nullable: true }) publicationDate?: Date; - @Fixture(faker => faker.random.word()) @Property({ columnType: 'text', nullable: true }) publisher?: string; diff --git a/src/backend/scripts/dbSeeds.ts b/src/backend/scripts/dbSeeds.ts deleted file mode 100644 index c8f2e63a..00000000 --- a/src/backend/scripts/dbSeeds.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { FixtureFactory } from '@mikro-resources/fixtures'; -import { MikroORM } from '@mikro-orm/core'; -import { Preprint } from '../models/entities'; -import config from '../mikro-orm.config'; - -async function main() { - try { - const orm = await MikroORM.init(config); - const factory = new FixtureFactory(orm, { logging: true, maxDepth: 4 }); - - // Generate and persist - const result = factory.make(Preprint); - await result.oneAndPersist(); - await orm.close(); - return; - } catch (err) { - console.error('Failed to run seeds:', err); - } -} - -main(); diff --git a/src/backend/utils/ids.js b/src/backend/utils/ids.js deleted file mode 100644 index 981ea346..00000000 --- a/src/backend/utils/ids.js +++ /dev/null @@ -1,8 +0,0 @@ -export function createRandomDoi() { - return ( - '10.' + - (Math.floor(Math.random() * 10000) + 10000).toString().substring(1) + - '/' + - (Math.floor(Math.random() * 1000) + 1000).toString().substring(1) - ); -} diff --git a/src/backend/utils/orcid.js b/src/backend/utils/orcid.js index 1f1cf853..6992fa9f 100644 --- a/src/backend/utils/orcid.js +++ b/src/backend/utils/orcid.js @@ -1,31 +1,9 @@ -import { ORCID as orcidUtils } from 'orcid-utils'; import fetch from 'node-fetch'; import { createError } from '../utils/http-errors.ts'; import config from '../config.ts'; import { Work } from '../models/entities/index.ts'; const ORCID_API_VERSION = 'v3.0'; -/** - * See https://support.orcid.org/hc/en-us/articles/360006897674-Structure-of-the-ORCID-Identifier - */ -export function createRandomOrcid(nTry = 0) { - const digits = Math.floor(Math.pow(10, 15) * Math.random()).toString(); - - let total = 0; - for (let i = 0; i < digits.length; i++) { - total = (total + parseInt(digits[i], 10)) * 2; - } - const result = (12 - (total % 11)) % 11; - const checkDigit = result === 10 ? 'X' : result.toString(); - - const orcid = `${digits}${checkDigit}`; - if (!orcidUtils.isValid(orcid) && nTry < 5) { - return createRandomOrcid(++nTry); - } - - return orcidUtils.toDashFormat(orcid); -} - /** * See https://members.orcid.org/api/tutorial/read-orcid-records */