From 14f55868fc0ebe8d61e1dad75ac3c2b341586a89 Mon Sep 17 00:00:00 2001 From: Daniel-I-Am Date: Fri, 28 Aug 2020 22:48:15 +0200 Subject: [PATCH] Set up proposed DB schema --- app/FreeCompanyLink.php | 36 +++++++++ app/FreeCompanyMember.php | 19 +++++ app/FreeCompanyRank.php | 23 ++++++ app/LinkCode.php | 28 +++++++ app/LodestoneCache.php | 16 ++++ app/UserLink.php | 20 +++++ ...193009_create_free_company_links_table.php | 33 ++++++++ ...0_08_28_193013_create_link_codes_table.php | 36 +++++++++ ...0_08_28_193017_create_user_links_table.php | 35 +++++++++ ...8_193022_create_lodestone_caches_table.php | 36 +++++++++ ...3043_create_free_company_members_table.php | 34 ++++++++ ...193047_create_free_company_ranks_table.php | 37 +++++++++ tests/Feature/ExampleTest.php | 21 ----- tests/Unit/ExampleTest.php | 18 ----- tests/Unit/RelationTest.php | 77 +++++++++++++++++++ 15 files changed, 430 insertions(+), 39 deletions(-) create mode 100644 app/FreeCompanyLink.php create mode 100644 app/FreeCompanyMember.php create mode 100644 app/FreeCompanyRank.php create mode 100644 app/LinkCode.php create mode 100644 app/LodestoneCache.php create mode 100644 app/UserLink.php create mode 100644 database/migrations/2020_08_28_193009_create_free_company_links_table.php create mode 100644 database/migrations/2020_08_28_193013_create_link_codes_table.php create mode 100644 database/migrations/2020_08_28_193017_create_user_links_table.php create mode 100644 database/migrations/2020_08_28_193022_create_lodestone_caches_table.php create mode 100644 database/migrations/2020_08_28_193043_create_free_company_members_table.php create mode 100644 database/migrations/2020_08_28_193047_create_free_company_ranks_table.php delete mode 100644 tests/Feature/ExampleTest.php delete mode 100644 tests/Unit/ExampleTest.php create mode 100644 tests/Unit/RelationTest.php diff --git a/app/FreeCompanyLink.php b/app/FreeCompanyLink.php new file mode 100644 index 0000000..46d63f7 --- /dev/null +++ b/app/FreeCompanyLink.php @@ -0,0 +1,36 @@ +hasMany(FreeCompanyMember::class, 'freeCompanyLinkId'); + } + + public function freeCompanyRanks() + { + return $this->hasMany(FreeCompanyRank::class, 'freeCompanyLinkId'); + } + + public function linkCodes() + { + return $this->hasMany(LinkCode::class, 'freeCompanyLinkId'); + } + + public function userLinks() + { + return $this->hasMany(UserLink::class, 'freeCompanyLinkId'); + } +} diff --git a/app/FreeCompanyMember.php b/app/FreeCompanyMember.php new file mode 100644 index 0000000..622259c --- /dev/null +++ b/app/FreeCompanyMember.php @@ -0,0 +1,19 @@ +belongsTo(FreeCompanyLink::class, 'freeCompanyLinkId'); + } +} diff --git a/app/FreeCompanyRank.php b/app/FreeCompanyRank.php new file mode 100644 index 0000000..1f4d33a --- /dev/null +++ b/app/FreeCompanyRank.php @@ -0,0 +1,23 @@ +belongsTo(FreeCompanyLink::class, 'freeCompanyLinkId'); + } +} diff --git a/app/LinkCode.php b/app/LinkCode.php new file mode 100644 index 0000000..ff75c64 --- /dev/null +++ b/app/LinkCode.php @@ -0,0 +1,28 @@ + 'datetime' + ]; + + public function freeCompanyLink() + { + return $this->belongsTo(FreeCompanyLink::class, 'freeCompanyLinkId'); + } +} diff --git a/app/LodestoneCache.php b/app/LodestoneCache.php new file mode 100644 index 0000000..6459a0d --- /dev/null +++ b/app/LodestoneCache.php @@ -0,0 +1,16 @@ +belongsTo(FreeCompanyLink::class, 'freeCompanyLinkId'); + } +} diff --git a/database/migrations/2020_08_28_193009_create_free_company_links_table.php b/database/migrations/2020_08_28_193009_create_free_company_links_table.php new file mode 100644 index 0000000..9ebeb5c --- /dev/null +++ b/database/migrations/2020_08_28_193009_create_free_company_links_table.php @@ -0,0 +1,33 @@ +id(); + $table->bigInteger('freeCompanyId')->unique(); + $table->bigInteger('discordGuildId')->nullable(); + $table->string('domainName', 255)->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('free_company_links'); + } +} diff --git a/database/migrations/2020_08_28_193013_create_link_codes_table.php b/database/migrations/2020_08_28_193013_create_link_codes_table.php new file mode 100644 index 0000000..d55b6c4 --- /dev/null +++ b/database/migrations/2020_08_28_193013_create_link_codes_table.php @@ -0,0 +1,36 @@ +id(); + $table->foreignId('freeCompanyLinkId')->constrained('free_company_links'); + $table->bigInteger('lodestoneId'); + $table->bigInteger('discordUserId')->nullable(); + $table->bigInteger('websiteUserId')->nullable(); + $table->dateTime('expires'); + $table->string('code', 128); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('link_codes'); + } +} diff --git a/database/migrations/2020_08_28_193017_create_user_links_table.php b/database/migrations/2020_08_28_193017_create_user_links_table.php new file mode 100644 index 0000000..b8293b3 --- /dev/null +++ b/database/migrations/2020_08_28_193017_create_user_links_table.php @@ -0,0 +1,35 @@ +id(); + $table->foreignId('freeCompanyLinkId')->constrained('free_company_links'); + $table->bigInteger('lodestoneId')->nullable(); + $table->bigInteger('discordUserId')->nullable(); + $table->bigInteger('websiteUserId')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_links'); + } +} diff --git a/database/migrations/2020_08_28_193022_create_lodestone_caches_table.php b/database/migrations/2020_08_28_193022_create_lodestone_caches_table.php new file mode 100644 index 0000000..420b232 --- /dev/null +++ b/database/migrations/2020_08_28_193022_create_lodestone_caches_table.php @@ -0,0 +1,36 @@ +id(); + $table->integer('type'); + $table->bigInteger('lodestoneId'); + $table->text('content'); + $table->timestamps(); + + $table->unique(['type', 'lodestoneId']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('lodestone_caches'); + } +} diff --git a/database/migrations/2020_08_28_193043_create_free_company_members_table.php b/database/migrations/2020_08_28_193043_create_free_company_members_table.php new file mode 100644 index 0000000..176d02c --- /dev/null +++ b/database/migrations/2020_08_28_193043_create_free_company_members_table.php @@ -0,0 +1,34 @@ +id(); + $table->foreignId('freeCompanyLinkId')->constrained('free_company_links'); + $table->bigInteger('lodestoneId'); + $table->string('lastSeenRank', 64); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('free_company_members'); + } +} diff --git a/database/migrations/2020_08_28_193047_create_free_company_ranks_table.php b/database/migrations/2020_08_28_193047_create_free_company_ranks_table.php new file mode 100644 index 0000000..c208426 --- /dev/null +++ b/database/migrations/2020_08_28_193047_create_free_company_ranks_table.php @@ -0,0 +1,37 @@ +id(); + $table->string('rankName', 64); + $table->foreignId('freeCompanyLinkId')->constrained('free_company_links'); + $table->integer('daysRequired'); + $table->bigInteger('discordRoleId')->nullable(); + $table->string('websiteRole', 64)->nullable(); + + $table->unique(['rankName', 'freeCompanyLinkId']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('free_company_ranks'); + } +} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php deleted file mode 100644 index cdb5111..0000000 --- a/tests/Feature/ExampleTest.php +++ /dev/null @@ -1,21 +0,0 @@ -get('/'); - - $response->assertStatus(200); - } -} diff --git a/tests/Unit/ExampleTest.php b/tests/Unit/ExampleTest.php deleted file mode 100644 index 358cfc8..0000000 --- a/tests/Unit/ExampleTest.php +++ /dev/null @@ -1,18 +0,0 @@ -assertTrue(true); - } -} diff --git a/tests/Unit/RelationTest.php b/tests/Unit/RelationTest.php new file mode 100644 index 0000000..3760e64 --- /dev/null +++ b/tests/Unit/RelationTest.php @@ -0,0 +1,77 @@ + 1, + 'discordGuildId' => 1, + 'domainName' => 'example.com' + ]); + + // Act + $userLink = UserLink::create([ + 'freeCompanyLinkId' => $fcLink->id, + 'lodestoneId' => 1, + 'discordUserId' => 1, + 'websiteUserId' => 1 + ]); + + $linkCode = LinkCode::create([ + 'freeCompanyLinkId' => $fcLink->id, + 'lodestoneId' => 1, + 'discordUserId' => 1, + 'websiteId' => 1, + 'expires' => Carbon::now(), + 'code' => 'asdf' + ]); + + $fcMember = FreeCompanyMember::create([ + 'freeCompanyLinkId' => $fcLink->id, + 'lodestoneId' => 1, + 'lastSeenRank' => 'Mentor' + ]); + + $fcRank = FreeCompanyRank::create([ + 'rankName' => 'asdf', + 'freeCompanyLinkId' => $fcLink->id, + 'daysRequired' => 2, + 'websiteRole' => 'asdf' + ]); + + // Assert + $this->assertEquals($userLink->freeCompanyLink->id, $fcLink->id); + $this->assertEquals($linkCode->freeCompanyLink->id, $fcLink->id); + $this->assertEquals($fcMember->freeCompanyLink->id, $fcLink->id); + $this->assertEquals($fcRank->freeCompanyLink->id, $fcLink->id); + + $this->assertEquals($userLink->id, $fcLink->userLinks->first()->id); + $this->assertEquals($linkCode->id, $fcLink->linkCodes->first()->id); + $this->assertEquals($fcMember->id, $fcLink->freeCompanyMembers->first()->id); + $this->assertEquals($fcRank->id, $fcLink->freeCompanyRanks->first()->id); + + // Abrogate + $fcMember->delete(); + $fcRank->delete(); + $linkCode->delete(); + $userLink->delete(); + $fcLink->delete(); + } +}