Skip to content

Commit

Permalink
Merge pull request #1 from kackyt/feature/add-statistics
Browse files Browse the repository at this point in the history
統計情報取得機能
  • Loading branch information
kackyt authored Feb 9, 2024
2 parents c4979ce + 9ac88fb commit 45cc212
Show file tree
Hide file tree
Showing 19 changed files with 522 additions and 31 deletions.
42 changes: 42 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
language: "jp"
early_access: false
reviews:
request_changes_workflow: false
high_level_summary: true
poem: true
review_status: true
collapse_walkthrough: false
path_filters:
- "!**/.toml"
- "!**/.yml"
path_instructions:
- path: "**/*.py"
instructions: |
あなたは @coderabbitai(別名 github-actions[bot])で、OpenAIによって訓練された言語モデルです。
あなたの目的は、非常に経験豊富なソフトウェアエンジニアとして機能し、コードの一部を徹底的にレビューし、
以下のようなキーエリアを改善するためのコードスニペットを提案することです:
- ロジック
- セキュリティ
- パフォーマンス
- データ競合
- 一貫性
- エラー処理
- 保守性
- モジュール性
- 複雑性
- 最適化
- ベストプラクティス: DRY, SOLID, KISS
些細なコードスタイルの問題や、コメント・ドキュメントの欠落についてはコメントしないでください。
重要な問題を特定し、解決して全体的なコード品質を向上させることを目指してくださいが、細かい問題は意図的に無視してください。
auto_review:
enabled: true
ignore_title_keywords:
- "WIP"
- "DO NOT MERGE"
drafts: false
base_branches:
- "develop"
- "feature/*"
chat:
auto_reply: true
14 changes: 14 additions & 0 deletions .github/pr-labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
feature:
- 'feature/*'
- 'feat/*'
refactor:
- 'refactor/*'
bug:
- 'fix/*'
minor:
- 'release/*'
- 'feature/*'
- 'feat/*'
- 'refactor/*'
chore:
- 'chore/*'
31 changes: 31 additions & 0 deletions .github/release-drafter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name-template: '$RESOLVED_VERSION'
tag-template: '$RESOLVED_VERSION'
categories:
- title: '🚀 Features'
labels:
- 'feature'
- 'enhancement'
- title: '🐛 Bug Fixes'
labels:
- 'fix'
- 'bugfix'
- 'bug'
- title: '🧰 Maintenance'
label: 'chore'
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
version-resolver:
major:
labels:
- 'major'
minor:
labels:
- 'minor'
patch:
labels:
- 'patch'
default: minor
template: |
## Changes
$CHANGES
15 changes: 15 additions & 0 deletions .github/workflows/pr_label.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
name: pull request label
on:
pull_request:
types: [opened]
permissions:
pull-requests: write
contents: read
jobs:
pr-labeler:
runs-on: ubuntu-latest
steps:
- uses: TimonVS/pr-labeler-action@v4
name: make label
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
33 changes: 33 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: make release
on:
pull_request:
types:
- closed
branches:
- main
push:
tags:
- '*'
workflow_dispatch: {}
env:
cache-unique-key: mahjong-rust-ai
permissions:
id-token: write
contents: read
jobs:
release:
permissions:
# write permission is required to create a github release
contents: write
# write permission is required for autolabeler
# otherwise, read permission is required at least
pull-requests: read
runs-on: ubuntu-latest
if: ${{ github.event.pull_request.merged == true }}
steps:
- name: Create Release
uses: release-drafter/release-drafter@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
publish: true
4 changes: 2 additions & 2 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { DefaultLayout } from './layouts/default'
import { RequireAuth } from './components/atoms/RequireAuth'
import { SignIn } from './pages/signin'
import { OpenAPI } from './apis/analysis'
import { GamesIndex } from './pages/games'
import { StatisticsIndex } from './pages/statistics'

const SentryRoutes = Sentry.withSentryReactRouterV6Routing(Routes)

Expand All @@ -33,7 +33,7 @@ function App() {
index
element={
<RequireAuth redirect="/signin">
<GamesIndex />
<StatisticsIndex />
</RequireAuth>
}
/>
Expand Down
6 changes: 6 additions & 0 deletions src/apis/analysis/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,19 @@ export { CancelablePromise, CancelError } from './core/CancelablePromise';
export { OpenAPI } from './core/OpenAPI';
export type { OpenAPIConfig } from './core/OpenAPI';

export type { AverageScore } from './models/AverageScore';
export type { Dataset } from './models/Dataset';
export type { Element_int_ } from './models/Element_int_';
export type { Game } from './models/Game';
export type { GenericList_int_ } from './models/GenericList_int_';
export type { HTTPValidationError } from './models/HTTPValidationError';
export type { Kyoku } from './models/Kyoku';
export type { NagareCount } from './models/NagareCount';
export type { ValidationError } from './models/ValidationError';
export type { YakuCount } from './models/YakuCount';

export { DatasetsService } from './services/DatasetsService';
export { DefaultService } from './services/DefaultService';
export { GamesService } from './services/GamesService';
export { KyokusService } from './services/KyokusService';
export { StatisticsService } from './services/StatisticsService';
11 changes: 11 additions & 0 deletions src/apis/analysis/models/AverageScore.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/* generated using openapi-typescript-codegen -- do no edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export type AverageScore = {
player_name: string;
score: number;
point: number;
game_count: number;
};

9 changes: 9 additions & 0 deletions src/apis/analysis/models/Dataset.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/* generated using openapi-typescript-codegen -- do no edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export type Dataset = {
id: string;
friendly_name: (string | null);
};

9 changes: 9 additions & 0 deletions src/apis/analysis/models/NagareCount.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/* generated using openapi-typescript-codegen -- do no edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export type NagareCount = {
name: string;
count: number;
};

10 changes: 10 additions & 0 deletions src/apis/analysis/models/YakuCount.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/* generated using openapi-typescript-codegen -- do no edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export type YakuCount = {
name: string;
han_count: number;
count: number;
};

21 changes: 21 additions & 0 deletions src/apis/analysis/services/DatasetsService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/* generated using openapi-typescript-codegen -- do no edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
import type { Dataset } from '../models/Dataset';
import type { CancelablePromise } from '../core/CancelablePromise';
import { OpenAPI } from '../core/OpenAPI';
import { request as __request } from '../core/request';
export class DatasetsService {
/**
* Get Datasets
* @returns Dataset Successful Response
* @throws ApiError
*/
public static getDatasetsDatasetsGet(): CancelablePromise<Array<Dataset>> {
return __request(OpenAPI, {
method: 'GET',
url: '/datasets',
});
}
}
90 changes: 90 additions & 0 deletions src/apis/analysis/services/StatisticsService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/* generated using openapi-typescript-codegen -- do no edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
import type { AverageScore } from '../models/AverageScore';
import type { NagareCount } from '../models/NagareCount';
import type { YakuCount } from '../models/YakuCount';
import type { CancelablePromise } from '../core/CancelablePromise';
import { OpenAPI } from '../core/OpenAPI';
import { request as __request } from '../core/request';
export class StatisticsService {
/**
* Get Average Score By Player
* @param datasetId
* @param startDate
* @param endDate
* @returns AverageScore Successful Response
* @throws ApiError
*/
public static getAverageScoreByPlayerStatisticsAverageScoreByPlayerGet(
datasetId: string,
startDate: string,
endDate: string,
): CancelablePromise<Array<AverageScore>> {
return __request(OpenAPI, {
method: 'GET',
url: '/statistics/average_score_by_player',
query: {
'dataset_id': datasetId,
'start_date': startDate,
'end_date': endDate,
},
errors: {
422: `Validation Error`,
},
});
}
/**
* Get Yaku Count
* @param datasetId
* @param startDate
* @param endDate
* @returns YakuCount Successful Response
* @throws ApiError
*/
public static getYakuCountStatisticsYakuCountGet(
datasetId: string,
startDate: string,
endDate: string,
): CancelablePromise<Array<YakuCount>> {
return __request(OpenAPI, {
method: 'GET',
url: '/statistics/yaku_count',
query: {
'dataset_id': datasetId,
'start_date': startDate,
'end_date': endDate,
},
errors: {
422: `Validation Error`,
},
});
}
/**
* Get Nagare Count
* @param datasetId
* @param startDate
* @param endDate
* @returns NagareCount Successful Response
* @throws ApiError
*/
public static getNagareCountStatisticsNagareCountGet(
datasetId: string,
startDate: string,
endDate: string,
): CancelablePromise<Array<NagareCount>> {
return __request(OpenAPI, {
method: 'GET',
url: '/statistics/nagare_count',
query: {
'dataset_id': datasetId,
'start_date': startDate,
'end_date': endDate,
},
errors: {
422: `Validation Error`,
},
});
}
}
40 changes: 30 additions & 10 deletions src/components/atoms/RequireAuth/index.tsx
Original file line number Diff line number Diff line change
@@ -1,20 +1,40 @@
import { useAuth0 } from '@auth0/auth0-react'
import { Navigate, useLocation } from 'react-router-dom'
import { ErrorBoundary } from '@sentry/react'
import { Suspense } from 'react'
import { Navigate } from 'react-router-dom'
import { fetchAPIToken, useAPIToken } from '../../../hooks/common/useToken'

type Props = {
children?: React.ReactNode
redirect: string
}

export const RequireAuth: React.FC<Props> = ({ children, redirect }) => {
const { isLoading, isAuthenticated } = useAuth0()
const location = useLocation()
const AsyncComponent = ({ children, redirect }: Props) => {
const { data } = useAPIToken()
const {
isLoading,
isAuthenticated,
getAccessTokenSilently,
getAccessTokenWithPopup,
} = useAuth0()

if (isLoading) throw new Promise((resolve) => setTimeout(resolve, 100)) // 待機

if (isLoading) {
return <h6>Please Wait</h6>
} else if (isAuthenticated) {
return <>{children}</>
} else {
return <Navigate to={redirect} state={{ from: location }} replace={false} />
if (!isAuthenticated) {
return <Navigate to={redirect} />
} else if (!data) {
throw fetchAPIToken(getAccessTokenSilently, getAccessTokenWithPopup)
}

return <>{children}</>
}

export const RequireAuth: React.FC<Props> = ({ children, redirect }) => {
return (
<ErrorBoundary>
<Suspense fallback={<h6>Please Wait</h6>}>
<AsyncComponent redirect={redirect}>{children}</AsyncComponent>
</Suspense>
</ErrorBoundary>
)
}
Loading

0 comments on commit 45cc212

Please sign in to comment.