Pause adding intermediary tables

I am struggling to remember why I started doing this.
I can't think of any real benefit.
This commit is contained in:
Brandon Presley 2022-12-09 15:06:29 +13:00
parent e6542798ea
commit 6d46fe959c
5 changed files with 94 additions and 2 deletions

View File

@ -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,
],
})

View File

@ -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<void> {
@ -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<void> {}

View File

@ -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<void> {
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<void> {}
}

10
plan-day.ts Normal file
View File

@ -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
}

10
plan-workout.ts Normal file
View File

@ -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
}