diff options
author | Logan Hunt <loganhunt@simponic.xyz> | 2022-03-30 15:18:16 -0600 |
---|---|---|
committer | Logan Hunt <loganhunt@simponic.xyz> | 2022-03-30 15:18:16 -0600 |
commit | acff469ba069b6f090adfd5ed91379c9f146aa77 (patch) | |
tree | e600e951d2e88ffde9252214fe31b8042ca129aa /server/database/migrations | |
parent | 042e3b9862b253fb3c3e59ee628dd9e30edf7e35 (diff) | |
download | locchat-acff469ba069b6f090adfd5ed91379c9f146aa77.tar.gz locchat-acff469ba069b6f090adfd5ed91379c9f146aa77.zip |
Ability to add, remove, update radius and location of chatrooms with a leaflet
Diffstat (limited to 'server/database/migrations')
-rw-r--r-- | server/database/migrations/1648605030863-AddChatRoom.ts | 20 | ||||
-rw-r--r-- | server/database/migrations/1648669551959-AddDistanceFunction.ts | 45 |
2 files changed, 60 insertions, 5 deletions
diff --git a/server/database/migrations/1648605030863-AddChatRoom.ts b/server/database/migrations/1648605030863-AddChatRoom.ts index d8eed52..e4b5ca9 100644 --- a/server/database/migrations/1648605030863-AddChatRoom.ts +++ b/server/database/migrations/1648605030863-AddChatRoom.ts @@ -1,10 +1,10 @@ -import { MigrationInterface, QueryRunner, Table } from 'typeorm'; +import { MigrationInterface, QueryRunner, Table, TableForeignKey } from 'typeorm'; export class AddChatRoom1648605030863 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise<void> { await queryRunner.createTable( new Table({ - name: 'chatroom', + name: 'chat_room', columns: [ { name: 'id', @@ -13,8 +13,8 @@ export class AddChatRoom1648605030863 implements MigrationInterface { isGenerated: true, }, { - name: 'name', - type: 'text', + name: 'userId', + type: 'int', isNullable: false, }, { @@ -35,9 +35,19 @@ export class AddChatRoom1648605030863 implements MigrationInterface { ], }), ); + + await queryRunner.createForeignKey( + 'chat_room', + new TableForeignKey({ + columnNames: ['userId'], + referencedColumnNames: ['id'], + referencedTableName: 'user', + onDelete: 'CASCADE', + }), + ); } public async down(queryRunner: QueryRunner): Promise<void> { - await queryRunner.dropTable('chatroom'); + await queryRunner.dropTable('chat_room'); } } diff --git a/server/database/migrations/1648669551959-AddDistanceFunction.ts b/server/database/migrations/1648669551959-AddDistanceFunction.ts new file mode 100644 index 0000000..0890936 --- /dev/null +++ b/server/database/migrations/1648669551959-AddDistanceFunction.ts @@ -0,0 +1,45 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddDistanceFunction1648669551959 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise<void> { + // From https://stackoverflow.com/questions/61135374/postgresql-calculate-distance-between-two-points-without-using-postgis + await queryRunner.query(` +CREATE OR REPLACE FUNCTION calculate_distance(lat1 float, lon1 float, lat2 float, lon2 float, units varchar) + RETURNS float AS $dist$ + DECLARE + dist float = 0; + radlat1 float; + radlat2 float; + theta float; + radtheta float; + BEGIN + IF lat1 = lat2 OR lon1 = lon2 + THEN RETURN dist; + ELSE + radlat1 = pi() * lat1 / 180; + radlat2 = pi() * lat2 / 180; + theta = lon1 - lon2; + radtheta = pi() * theta / 180; + dist = sin(radlat1) * sin(radlat2) + cos(radlat1) * cos(radlat2) * cos(radtheta); + + IF dist > 1 THEN dist = 1; END IF; + + dist = acos(dist); + dist = dist * 180 / pi(); + dist = dist * 60 * 1.1515; + + IF units = 'K' THEN dist = dist * 1.609344; END IF; + IF units = 'N' THEN dist = dist * 0.8684; END IF; + + RETURN dist; + END IF; + END; + $dist$ LANGUAGE plpgsql;`); + } + + public async down(queryRunner: QueryRunner): Promise<void> { + await queryRunner.query( + `DROP FUNCTION IF EXISTS calculate_distance(lat1 float, lon1 float, lat2 float, lon2 float, units varchar);`, + ); + } +} |