Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] 26.04 웹소켓 코드 수정 #182 #200

Merged
merged 7 commits into from
Nov 27, 2024
4 changes: 2 additions & 2 deletions BE/src/asset/asset.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ import { Asset } from './asset.entity';
import { UserStock } from './user-stock.entity';
import { UserStockRepository } from './user-stock.repository';
import { StockDetailModule } from '../stock/detail/stock-detail.module';
import { StockTradeHistoryModule } from '../stock/trade/history/stock-trade-history.module';
import { StockSocketModule } from '../stockSocket/stock-socket.module';

@Module({
imports: [
TypeOrmModule.forFeature([Asset, UserStock]),
StockDetailModule,
StockTradeHistoryModule,
StockSocketModule,
],
controllers: [AssetController],
providers: [AssetService, AssetRepository, UserStockRepository],
Expand Down
10 changes: 4 additions & 6 deletions BE/src/asset/asset.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@ import { StockDetailService } from '../stock/detail/stock-detail.service';
import { UserStock } from './user-stock.entity';
import { Asset } from './asset.entity';
import { InquirePriceResponseDto } from '../stock/detail/dto/stock-detail-response.dto';
import { StockTradeHistorySocketService } from '../stock/trade/history/stock-trade-history-socket.service';
import { TradeType } from '../stock/order/enum/trade-type';
import { StockPriceSocketService } from '../stockSocket/stock-price-socket.service';

@Injectable()
export class AssetService {
constructor(
private readonly userStockRepository: UserStockRepository,
private readonly assetRepository: AssetRepository,
private readonly stockDetailService: StockDetailService,
private readonly stockTradeHistorySocketService: StockTradeHistorySocketService,
private readonly stockPriceSocketService: StockPriceSocketService,
) {}

async getUserStockByCode(userId: number, stockCode: string) {
Expand Down Expand Up @@ -148,7 +148,7 @@ export class AssetService {
await this.userStockRepository.findAllDistinctCode(userId);

userStocks.map((userStock) =>
this.stockTradeHistorySocketService.subscribeByCode(userStock.stock_code),
this.stockPriceSocketService.subscribeByCode(userStock.stock_code),
);
}

Expand All @@ -157,9 +157,7 @@ export class AssetService {
await this.userStockRepository.findAllDistinctCode(userId);

userStocks.map((userStock) =>
this.stockTradeHistorySocketService.unsubscribeByCode(
userStock.stock_code,
),
this.stockPriceSocketService.unsubscribeByCode(userStock.stock_code),
);
}
}
4 changes: 0 additions & 4 deletions BE/src/common/websocket/socket.gateway.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,4 @@ export class SocketGateway {

this.server.emit(event, stockIndexValue);
}

sendStockTradeHistoryValueToClient(event, historyData) {
this.server.emit(event, historyData);
}
}
4 changes: 2 additions & 2 deletions BE/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ async function bootstrap() {
'http://localhost:5173',
'http://juga.kro.kr:5173',
'http://juga.kro.kr:3000',
//개발 서버
// 개발 서버
'http://223.130.151.42:5173',
'http://223.130.151.42:3000',
//배포 서버
// 배포 서버
'http://175.45.204.158',
'http://175.45.204.158:3000',
'http://juga.kro.kr',
Expand Down
2 changes: 1 addition & 1 deletion BE/src/ranking/ranking.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ export class RankingService {

return {
topRank: parsedTopRank,
userRank: userRank,
userRank,
};
}

Expand Down
42 changes: 0 additions & 42 deletions BE/src/stock/index/stock-index-socket.service.ts

This file was deleted.

3 changes: 1 addition & 2 deletions BE/src/stock/index/stock-index.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@ import { StockIndexController } from './stock-index.controller';
import { StockIndexService } from './stock-index.service';
import { KoreaInvestmentModule } from '../../common/koreaInvestment/korea-investment.module';
import { SocketModule } from '../../common/websocket/socket.module';
import { StockIndexSocketService } from './stock-index-socket.service';

@Module({
imports: [KoreaInvestmentModule, SocketModule],
controllers: [StockIndexController],
providers: [StockIndexService, StockIndexSocketService],
providers: [StockIndexService],
})
export class StockIndexModule {}
119 changes: 0 additions & 119 deletions BE/src/stock/order/stock-order-socket.service.ts

This file was deleted.

11 changes: 8 additions & 3 deletions BE/src/stock/order/stock-order.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,16 @@ import { Order } from './stock-order.entity';
import { StockOrderRepository } from './stock-order.repository';
import { SocketModule } from '../../common/websocket/socket.module';
import { AssetModule } from '../../asset/asset.module';
import { StockOrderSocketService } from './stock-order-socket.service';
import { StockSocketModule } from '../../stockSocket/stock-socket.module';

@Module({
imports: [TypeOrmModule.forFeature([Order]), SocketModule, AssetModule],
imports: [
TypeOrmModule.forFeature([Order]),
SocketModule,
AssetModule,
StockSocketModule,
],
controllers: [StockOrderController],
providers: [StockOrderService, StockOrderRepository, StockOrderSocketService],
providers: [StockOrderService, StockOrderRepository],
})
export class StockOrderModule {}
89 changes: 1 addition & 88 deletions BE/src/stock/order/stock-order.repository.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { DataSource, Repository } from 'typeorm';
import { InjectDataSource } from '@nestjs/typeorm';
import { Injectable, InternalServerErrorException } from '@nestjs/common';
import { Injectable } from '@nestjs/common';
import { Order } from './stock-order.entity';
import { StatusType } from './enum/status-type';
import { Asset } from '../../asset/asset.entity';
import { UserStock } from '../../asset/user-stock.entity';
import { StockOrderRawInterface } from './interface/stock-order-raw.interface';

@Injectable()
Expand All @@ -20,91 +18,6 @@ export class StockOrderRepository extends Repository<Order> {
.getRawMany();
}

async updateOrderAndAssetAndUserStockWhenBuy(order, realPrice) {
const queryRunner = this.dataSource.createQueryRunner();
await queryRunner.startTransaction();

try {
await queryRunner.manager.update(
Order,
{ id: order.id },
{ status: StatusType.COMPLETE, completed_at: new Date() },
);
await queryRunner.manager
.createQueryBuilder()
.update(Asset)
.set({
cash_balance: () => `cash_balance - :realPrice`,
last_updated: new Date(),
})
.where({ user_id: order.user_id })
.setParameters({ realPrice })
.execute();

await queryRunner.query(
`INSERT INTO user_stocks (user_id, stock_code, quantity, avg_price, last_updated) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE avg_price = (avg_price * quantity + ? * ?) / (quantity + ?), quantity = quantity + ?`,
[
order.user_id,
order.stock_code,
order.amount,
order.price,
new Date(),
order.price,
order.amount,
order.amount,
order.amount,
],
);

await queryRunner.commitTransaction();
} catch (err) {
await queryRunner.rollbackTransaction();
throw new InternalServerErrorException(err);
} finally {
await queryRunner.release();
}
}

async updateOrderAndAssetAndUserStockWhenSell(order, realPrice) {
const queryRunner = this.dataSource.createQueryRunner();
await queryRunner.startTransaction();

try {
await queryRunner.manager.update(
Order,
{ id: order.id },
{ status: StatusType.COMPLETE, completed_at: new Date() },
);
await queryRunner.manager
.createQueryBuilder()
.update(Asset)
.set({
cash_balance: () => `cash_balance + :realPrice`,
last_updated: new Date(),
})
.where({ user_id: order.user_id })
.setParameters({ realPrice })
.execute();

await queryRunner.manager
.createQueryBuilder()
.update(UserStock)
.set({
quantity: () => `quantity - :newQuantity`,
})
.where({ user_id: order.user_id, stock_code: order.stock_code })
.setParameters({ newQuantity: order.amount })
.execute();

await queryRunner.commitTransaction();
} catch (err) {
await queryRunner.rollbackTransaction();
throw new InternalServerErrorException();
} finally {
await queryRunner.release();
}
}

async findAllPendingOrdersByUserId(userId: number) {
return this.createQueryBuilder('o')
.leftJoinAndSelect('stocks', 's', 's.code = o.stock_code')
Expand Down
Loading
Loading