diff --git a/data-source.ts b/data-source.ts index 7c3eef1..044b440 100644 --- a/data-source.ts +++ b/data-source.ts @@ -26,7 +26,10 @@ import {addNoSound1667186456118} from './migrations/1667186456118-add-no-sound' import {dropMigrations1667190214743} from './migrations/1667190214743-drop-migrations' import {splitColor1669420187764} from './migrations/1669420187764-split-color' import {addDays1670284587217} from './migrations/1670284587217-add-days' +import {addWorkouts1670477728181} from './migrations/1670477728181-add-workouts' import {Plan} from './plan' +import {PlanDay} from './plan-day' +import {PlanWorkout} from './plan-workout' import Settings from './settings' import {Workout} from './workout' @@ -34,7 +37,7 @@ export const AppDataSource = new DataSource({ type: 'react-native', database: 'massive.db', location: 'default', - entities: [GymSet, Plan, Settings, Day, Workout], + entities: [GymSet, Plan, Settings, Day, Workout, PlanWorkout, PlanDay], migrationsRun: true, migrationsTableName: 'typeorm_migrations', migrations: [ @@ -63,5 +66,6 @@ export const AppDataSource = new DataSource({ dropMigrations1667190214743, splitColor1669420187764, addDays1670284587217, + addWorkouts1670477728181, ], }) diff --git a/migrations/1670284587217-add-days.ts b/migrations/1670284587217-add-days.ts index be426f7..b7e1fbd 100644 --- a/migrations/1670284587217-add-days.ts +++ b/migrations/1670284587217-add-days.ts @@ -1,4 +1,9 @@ import {MigrationInterface, QueryRunner, Table, TableColumn} from 'typeorm' +import {AppDataSource} from '../data-source' +import {Day} from '../day' +import {planRepo} from '../db' +import {PlanWorkout} from '../plan-workout' +import {DAYS} from '../time' export class addDays1670284587217 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { @@ -11,7 +16,6 @@ export class addDays1670284587217 implements MigrationInterface { ], }), ) - await queryRunner.dropColumn('plans', 'days') await queryRunner.query(` INSERT INTO days VALUES (1, 'Sunday'), @@ -21,6 +25,26 @@ export class addDays1670284587217 implements MigrationInterface { (5, 'Thursday'), (6, 'Friday'), (7, 'Saturday')`) + await queryRunner.createTable( + new Table({ + name: 'plans_days_days', + columns: [ + new TableColumn({name: 'plansId', type: 'int'}), + new TableColumn({name: 'daysId', type: 'int'}), + ], + }), + ) + const plans = await AppDataSource.query('SELECT * FROM plans') + const planWorkoutRepo = AppDataSource.getRepository(PlanWorkout) + for (const plan of plans) { + const days: Day[] = plan.days.split(',').map((day: string) => { + const id = DAYS.indexOf(day) + 1 + return {id, name: day} + }) + planWorkoutRepo.save(days) + await planRepo.update(plan.id, {days}) + } + await queryRunner.dropColumn('plans', 'days') } public async down(queryRunner: QueryRunner): Promise {} diff --git a/migrations/1670477728181-add-workouts.ts b/migrations/1670477728181-add-workouts.ts new file mode 100644 index 0000000..40cebe8 --- /dev/null +++ b/migrations/1670477728181-add-workouts.ts @@ -0,0 +1,44 @@ +import {MigrationInterface, QueryRunner, Table, TableColumn} from 'typeorm' +import {AppDataSource} from '../data-source' +import {planRepo} from '../db' +import {PlanWorkout} from '../plan-workout' +import {Workout} from '../workout' + +export class addWorkouts1670477728181 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createTable( + new Table({ + name: 'workouts', + columns: [ + new TableColumn({ + name: 'id', + type: 'int', + isPrimary: true, + isGenerated: true, + }), + new TableColumn({name: 'name', type: 'text', isNullable: false}), + ], + }), + ) + await queryRunner.createTable( + new Table({ + name: 'plans_workouts_workouts', + columns: [ + new TableColumn({name: 'plansId', type: 'int'}), + new TableColumn({name: 'workoutsId', type: 'int'}), + ], + }), + ) + const plans = await AppDataSource.query('SELECT * FROM plans') + const repo = AppDataSource.getRepository(PlanWorkout) + for (const plan of plans) { + const workouts: PlanWorkout[] = plan.workouts + .split(',') + .map((workout: string) => ({plansId: plan.id})) + repo.save() + } + await queryRunner.dropColumn('plans', 'workouts') + } + + public async down(queryRunner: QueryRunner): Promise {} +} diff --git a/plan-day.ts b/plan-day.ts new file mode 100644 index 0000000..85ef7c0 --- /dev/null +++ b/plan-day.ts @@ -0,0 +1,10 @@ +import {Column, Entity, PrimaryColumn} from 'typeorm' + +@Entity('plans_days_days') +export class PlanDay { + @PrimaryColumn('int') + plansId: number + + @Column('int') + daysId: number +} diff --git a/plan-workout.ts b/plan-workout.ts new file mode 100644 index 0000000..bad873d --- /dev/null +++ b/plan-workout.ts @@ -0,0 +1,10 @@ +import {Column, Entity, PrimaryColumn} from 'typeorm' + +@Entity('plans_workouts_workouts') +export class PlanWorkout { + @PrimaryColumn('int') + plansId: number + + @Column('int') + workoutsId: number +}