summaryrefslogtreecommitdiff
path: root/server/database/migrations
diff options
context:
space:
mode:
authorLogan Hunt <loganhunt@simponic.xyz>2022-03-30 15:18:16 -0600
committerLogan Hunt <loganhunt@simponic.xyz>2022-03-30 15:18:16 -0600
commitacff469ba069b6f090adfd5ed91379c9f146aa77 (patch)
treee600e951d2e88ffde9252214fe31b8042ca129aa /server/database/migrations
parent042e3b9862b253fb3c3e59ee628dd9e30edf7e35 (diff)
downloadlocchat-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.ts20
-rw-r--r--server/database/migrations/1648669551959-AddDistanceFunction.ts45
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);`,
+ );
+ }
+}