Skip to content
This repository has been archived by the owner on Nov 7, 2020. It is now read-only.

Commit

Permalink
feat: add followers/following to character/corporation/allinace
Browse files Browse the repository at this point in the history
  • Loading branch information
mentos1386 committed Jul 30, 2018
1 parent 2fd6acd commit b38685b
Show file tree
Hide file tree
Showing 21 changed files with 169 additions and 66 deletions.
9 changes: 7 additions & 2 deletions src/modules/alliance/alliance.controller.ts
Expand Up @@ -2,12 +2,16 @@ import { Controller, Get, HttpStatus, Param, Response } from '@nestjs/common';
import { AllianceService } from './alliance.service';
import { DAlliance } from './alliance.dto';
import { ApiResponse, ApiUseTags } from '@nestjs/swagger';
import { FollowService } from '../follow/follow.service';

@ApiUseTags('alliances')
@Controller('alliances')
export class AllianceController {

constructor(private allianceService: AllianceService) {
constructor(
private allianceService: AllianceService,
private followService: FollowService,
) {
}

@ApiResponse({
Expand All @@ -20,7 +24,8 @@ export class AllianceController {
@Param('allianceId') allianceId: number,
): Promise<DAlliance> {
const alliance = await this.allianceService.get(allianceId);
return new DAlliance(alliance);
const followers = await this.followService.getAllianceFollowers(alliance);
return new DAlliance(alliance, followers);
}

}
7 changes: 6 additions & 1 deletion src/modules/alliance/alliance.dto.ts
Expand Up @@ -3,6 +3,8 @@ import { Alliance } from './alliance.entity';
import { DPagination } from '../core/pagination/paggination.dto';
import { IAllianceIcon } from './alliance.interface';
import { ApiModelProperty } from '@nestjs/swagger';
import { Follow } from '../follow/follow.entity';
import { DFollow } from '../follow/follow.dto';

export class DAllianceIcon {
@ApiModelProperty()
Expand Down Expand Up @@ -55,6 +57,8 @@ export class DAlliance {
executorCorporation: DCorporationShortWithoutAlliance;
@ApiModelProperty()
icon: DAllianceIcon;
@ApiModelProperty()
followers: DFollow[];

/* LIVE Data */
@ApiModelProperty()
Expand All @@ -80,14 +84,15 @@ export class DAlliance {
@ApiModelProperty()
corpCount: number;

constructor(alliance: Alliance) {
constructor(alliance: Alliance, followers: Follow[]) {
this.id = alliance.id;
this.name = alliance.name;
this.handle = alliance.handle;
this.ticker = alliance.ticker;
this.dateFounded = alliance.dateFounded;
this.executorCorporation = new DCorporationShortWithoutAlliance(alliance.executorCorporation);
this.icon = new DAllianceIcon(alliance.icon);
this.followers = followers.map(follow => new DFollow(follow));

this.hasSupers = alliance.hasSupers;
this.iskDestroyed = alliance.iskDestroyed;
Expand Down
2 changes: 1 addition & 1 deletion src/modules/alliance/alliance.entity.ts
Expand Up @@ -50,7 +50,7 @@ export class Alliance {
comments: Comment[];

@OneToMany(type => Follow, follow => follow.followingAlliance)
followers: Follow[];
followers: Promise<Follow[]>;

@UpdateDateColumn()
updatedAt: Date;
Expand Down
2 changes: 2 additions & 0 deletions src/modules/alliance/alliance.module.ts
Expand Up @@ -6,6 +6,7 @@ import { ZKillboardModule } from '../core/external/zkillboard/zkillboard.module'
import { CorporationModule } from '../corporation/corporation.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AllianceRepository } from './alliance.repository';
import { FollowModule } from '../follow/follow.module';

@Module({
imports: [
Expand All @@ -14,6 +15,7 @@ import { AllianceRepository } from './alliance.repository';
ZKillboardModule,
ESIModule,
forwardRef(() => CorporationModule),
forwardRef(() => FollowModule),
],
controllers: [
AllianceController,
Expand Down
14 changes: 10 additions & 4 deletions src/modules/authentication/authentication.controller.ts
Expand Up @@ -3,15 +3,19 @@ import {
Response,
} from '@nestjs/common';
import { AuthenticationService } from './authentication.service';
import { DCharacterShort } from '../character/character.dto';
import { DCharacterShort, DCharacter } from '../character/character.dto';
import { ApiBearerAuth, ApiImplicitBody, ApiResponse, ApiUseTags } from '@nestjs/swagger';
import { IAuthenticationResponse } from '../core/external/sso/sso.interface';
import { FollowService } from '../follow/follow.service';

@ApiUseTags('authentication')
@Controller('authentication')
export class AuthenticationController {

constructor(private authenticationService: AuthenticationService) {
constructor(
private authenticationService: AuthenticationService,
private followService: FollowService,
) {
}

@ApiResponse({
Expand All @@ -32,15 +36,17 @@ export class AuthenticationController {
@Get('/sso/verify')
public async verify(
@Headers('authorization') token: string,
): Promise<DCharacterShort> {
): Promise<DCharacter> {
if (!token) throw new HttpException(
'Authorization header is required!',
HttpStatus.BAD_REQUEST);

const character = await this.authenticationService
.verifyAuthentication(token.slice('Bearer '.length));
const following = await this.followService.getCharacterFollowing(character);
const followers = await this.followService.getCharacterFollowers(character);

return new DCharacterShort(character);
return new DCharacter(character, followers, following);
}

@ApiResponse({
Expand Down
6 changes: 4 additions & 2 deletions src/modules/authentication/authentication.module.ts
@@ -1,14 +1,16 @@
import { Module } from '@nestjs/common';
import { Module, forwardRef } from '@nestjs/common';
import { AuthenticationController } from './authentication.controller';
import { AuthenticationService } from './authentication.service';
import { SSOModule } from '../core/external/sso/sso.module';
import { CharacterModule } from '../character/character.module';
import { AuthenticationGuard } from './authentication.guard';
import { FollowModule } from '../follow/follow.module';

@Module({
imports: [
SSOModule,
CharacterModule,
forwardRef(() => CharacterModule),
forwardRef(() => FollowModule),
],
controllers: [
AuthenticationController,
Expand Down
11 changes: 9 additions & 2 deletions src/modules/character/character.controller.ts
Expand Up @@ -2,12 +2,16 @@ import { Controller, Get, HttpStatus, Param } from '@nestjs/common';
import { CharacterService } from './character.service';
import { DCharacter } from './character.dto';
import { ApiResponse, ApiUseTags } from '@nestjs/swagger';
import { FollowService } from '../follow/follow.service';

@ApiUseTags('characters')
@Controller('characters')
export class CharactersController {

constructor(private characterService: CharacterService) {
constructor(
private characterService: CharacterService,
private followService: FollowService,
) {
}

@ApiResponse({
Expand All @@ -20,7 +24,10 @@ export class CharactersController {
@Param('characterId') characterId: number,
): Promise<DCharacter> {
const character = await this.characterService.get(characterId);
return new DCharacter(character);
const followers = await this.followService.getCharacterFollowers(character);
const following = await this.followService.getCharacterFollowing(character);

return new DCharacter(character, followers, following);
}

}
10 changes: 9 additions & 1 deletion src/modules/character/character.dto.ts
Expand Up @@ -3,6 +3,8 @@ import { Character } from './character.entity';
import { ICharacterPortrait } from './character.interface';
import { DPagination } from '../core/pagination/paggination.dto';
import { ApiModelProperty } from '@nestjs/swagger';
import { DFollowAction, DFollow } from '../follow/follow.dto';
import { Follow } from '../follow/follow.entity';

export class DCharacterPortrait {
@ApiModelProperty()
Expand Down Expand Up @@ -84,6 +86,10 @@ export class DCharacter {
portrait: DCharacterPortrait;
@ApiModelProperty()
corporation: DCorporationShort;
@ApiModelProperty()
followers: DFollow[];
@ApiModelProperty()
following: DFollow[];

/* LIVE Data*/
@ApiModelProperty()
Expand All @@ -103,7 +109,7 @@ export class DCharacter {
@ApiModelProperty()
soloLosses: number;

constructor(character: Character) {
constructor(character: Character, followers: Follow[], following: Follow[]) {
this.id = character.id;
this.handle = character.handle;
this.name = character.name;
Expand All @@ -115,6 +121,8 @@ export class DCharacter {
this.securityStatus = character.securityStatus;
this.portrait = new DCharacterPortrait(character.portrait);
this.corporation = new DCorporationShort(character.corporation);
this.followers = followers.map(follow => new DFollow(follow))
this.following = following.map(follow => new DFollow(follow))

this.iskDestroyed = character.iskDestroyed;
this.iskLost = character.iskLost;
Expand Down
2 changes: 2 additions & 0 deletions src/modules/character/character.module.ts
Expand Up @@ -6,6 +6,7 @@ import { ESIModule } from '../core/external/esi/esi.module';
import { CorporationModule } from '../corporation/corporation.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { CharacterRepository } from './character.repository';
import { FollowModule } from '../follow/follow.module';

@Module({
imports: [
Expand All @@ -14,6 +15,7 @@ import { CharacterRepository } from './character.repository';
ZKillboardModule,
ESIModule,
forwardRef(() => CorporationModule),
forwardRef(() => FollowModule),
],
controllers: [
CharactersController,
Expand Down
22 changes: 0 additions & 22 deletions src/modules/character/character.service.ts
Expand Up @@ -46,28 +46,6 @@ export class CharacterService implements IService<Character> {
return character;
}

/**
* Get all characters by ids
* @param {number[]} ids
* @returns {Promise<Character[]>}
*/
public async getAllById(ids: number[]): Promise<Character[]> {
const characters = await this.characterRepository.getAllByIds(ids);

for (const id of ids) {
const character = characters.find(c => c.id === id);
// If we didn't found in database, try to populate it
if (!character) characters.push(await this.findCharacterById(id));
}

for (const key in characters) {
const zkillChar = await this.zkillboardService.characterStatistics(characters[key].id);
characters[key].populateZKillboard(zkillChar);
}

return characters;
}

/**
* Update character by id
* @param {Character} character
Expand Down
10 changes: 8 additions & 2 deletions src/modules/corporation/corporation.controller.ts
Expand Up @@ -2,12 +2,16 @@ import { Controller, Get, HttpStatus, Param, Response } from '@nestjs/common';
import { CorporationService } from './corporation.service';
import { DCorporation } from './corporation.dto';
import { ApiResponse, ApiUseTags } from '@nestjs/swagger';
import { FollowService } from '../follow/follow.service';

@ApiUseTags('corporations')
@Controller('corporations')
export class CorporationController {

constructor(private corporationService: CorporationService) {
constructor(
private corporationService: CorporationService,
private followService: FollowService,
) {
}

@ApiResponse({
Expand All @@ -20,7 +24,9 @@ export class CorporationController {
@Param('corporationId') corporationId: number,
): Promise<DCorporation> {
const corporation = await this.corporationService.get(corporationId);
return new DCorporation(corporation);
const followers = await this.followService.getCorporationFollowers(corporation);

return new DCorporation(corporation, followers);
}

}
7 changes: 6 additions & 1 deletion src/modules/corporation/corporation.dto.ts
Expand Up @@ -3,6 +3,8 @@ import { Corporation } from './corporation.entity';
import { DPagination } from '../core/pagination/paggination.dto';
import { ICorporationIcon } from './corporation.interface';
import { ApiModelProperty } from '@nestjs/swagger';
import { DFollow } from '../follow/follow.dto';
import { Follow } from '../follow/follow.entity';

export class DCorporationIcon {
@ApiModelProperty()
Expand Down Expand Up @@ -85,6 +87,8 @@ export class DCorporation {
alliance?: DAllianceShort;
@ApiModelProperty()
icon: DCorporationIcon;
@ApiModelProperty()
followers: DFollow[];

/* LIVE Data*/
@ApiModelProperty()
Expand All @@ -104,14 +108,15 @@ export class DCorporation {
@ApiModelProperty()
soloLosses: number;

constructor(corporation: Corporation) {
constructor(corporation: Corporation, followers: Follow[]) {
this.id = corporation.id;
this.handle = corporation.handle;
this.name = corporation.name;
this.ticker = corporation.ticker;
this.description = corporation.description;
this.alliance = corporation.alliance ? new DAllianceShort(corporation.alliance) : null;
this.icon = new DCorporationIcon(corporation.icon);
this.followers = followers.map(follow => new DFollow(follow));

this.iskDestroyed = corporation.iskDestroyed;
this.iskLost = corporation.iskLost;
Expand Down
2 changes: 1 addition & 1 deletion src/modules/corporation/corporation.entity.ts
Expand Up @@ -59,7 +59,7 @@ export class Corporation {
executingAlliance: Alliance;

@OneToMany(type => Follow, follow => follow.followingCorporation)
followers: Follow[];
followers: Promise<Follow[]>;

@Column({ nullable: true })
createdAt?: Date;
Expand Down
2 changes: 2 additions & 0 deletions src/modules/corporation/corporation.module.ts
Expand Up @@ -7,6 +7,7 @@ import { CharacterModule } from '../character/character.module';
import { AllianceModule } from '../alliance/alliance.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { CorporationRepository } from './corporation.repository';
import { FollowModule } from '../follow/follow.module';

@Module({
imports: [
Expand All @@ -16,6 +17,7 @@ import { CorporationRepository } from './corporation.repository';
ESIModule,
forwardRef(() => CharacterModule),
forwardRef(() => AllianceModule),
forwardRef(() => FollowModule),
],
controllers: [
CorporationController,
Expand Down
2 changes: 1 addition & 1 deletion src/modules/follow/follow.constants.ts
@@ -1,5 +1,5 @@

export enum FOLLOW_TYPE {
export enum FOLLOW_ACTION_TYPE {
FOLLOW = 'FOLLOW',
UN_FOLLOW = 'UN_FOLLOW',
}

0 comments on commit b38685b

Please sign in to comment.