Giter Club home page Giter Club logo

fukagawa-coffee's Introduction

Stockman

Stock and order manager for Fukagawa Coffee Co.,Ltd. (and others)

This project was generated with Angular CLI version 11.2.2.

Requirements

Required

package version
node.js ^12.20.2 || ^14.15.5 || ^16.10.0
npm >= 6.14.11

Optional npm global packages

package version
@angular/cli ^13
firebase-tools ^10.7.1

If you have not installed @angular/cli globally, you may use npx ng instead of ng commands below.

For VSCode users

Install angular.ng-template extension for type-hinting and code completion in HTML templates.

Installation

git clone [email protected]:plageoj/fukagawa-coffee.git
cd fukagawa-coffee
npm install

Development server

Run npm start for a dev server with Firebase local emulator suite. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files.

If you need to connect to the production environment, run npm run serve:prod.

Code scaffolding

Run ng generate component component-name to generate a new component. You can also use ng generate directive|pipe|service|class|guard|interface|enum|module.

Coding Style

Refer https://angular.io/guide/styleguide for coding style. Run ng lint or npm run lint for linting.

Commit prefix

Adding commit prefix is optional but recommended as it helps review process. Choose one from below:

  • add: Add some features, components, modules, etc.
  • del: Delete something.
  • fix: Fix bugs and issues.
  • doc: Documentation updates.
  • dep: Updating dependencies.
  • chore: Other changes that don't modify source files.

Build

Run ng build or npm run build to build the project. The build artifacts will be stored in the dist/ directory. Use the -c production flag or run npm run build:prod for a production build.

Deploy

This application is hosted on Firebase hosting. Merging any pull requests into master branch will trigger an automatic deployment.

Manual deployment is also available for approved firebase project members only, via ng deploy or npm run deploy (requires global firebase-tools installation) command.

Running unit tests

Run ng test or npm run test to execute the unit tests via Karma.

Running end-to-end tests

Run ng e2e or npm run e2e to execute the end-to-end tests via Protractor.

Further help

To get more help on the Angular CLI use ng help or go check out the Angular CLI Overview and Command Reference page.

fukagawa-coffee's People

Contributors

cycling777 avatar dependabot[bot] avatar plageoj avatar toddlerer avatar

Watchers

 avatar

fukagawa-coffee's Issues

README にセットアップ用ドキュメントを追加する

経緯・理由

HiCoder の Web 会にこのプロジェクトを持っていくために、開発に着手しやすくしたい。

追加内容詳細

READMEに必要要件、セットアップ方法を追加する。

完了要件

開発者が README を読むだけで環境構築して ng serve が実行できるようになる。

手順・方法

README にセットアップ手順を追加

その他の解決方法

Wiki に書いてもいいかもしれない。日本語情報は Wiki に書くことにしようかな

Angular のアップデート

経緯・理由

Dependabot のアラートが来たので

追加内容詳細

Angular 13.2.6 から 13.3.4 へのアップデートを行う

完了要件

ng update で更新案内が出なくなる

手順・方法

ng update で以下のパッケージのアップデートを行う(全部繋げてまとめて実行して良い)

      Name                                    Version                  Command to update
     -------------------------------------------------------------------------------------
      @angular/cdk                            13.2.6 -> 13.3.4         ng update @angular/cdk
      @angular/cli                            13.2.6 -> 13.3.3         ng update @angular/cli
      @angular/core                           13.2.6 -> 13.3.4         ng update @angular/core
      @angular/fire                           7.2.1 -> 7.3.0           ng update @angular/fire
      @angular/material                       13.2.6 -> 13.3.4         ng update @angular/material

そのあと、npm outdated で出力されるパッケージを更新する。
npx npm-check-updates -u が便利。

単純に最新にすると typescript 等が新しくなりすぎて起動できなくなることがあるので、
npm run build が動くか確認する。

その他の解決方法

No response

メールアドレスログインを実装する

経緯・理由

  • ロールのテスト用に複数アカウントが作れるとよい
  • HiCoder での開発用にあるとメンバーが入れて便利

追加内容詳細

メールアドレスによる新規登録、ログイン、パスワードリセットを追加する。

完了要件

  • ユーザーはメールアドレスとパスワードでアカウント登録できる。
  • 登録した内容でログインできる
  • パスワードを忘れた場合はリセットメールを送信できる

手順・方法

No response

その他の解決方法

No response

単体テストが動くようにする

spec の追加はせず、現状のものがオールグリーンになることをめざす。

  • テスト環境で Firebase をエミュレータに繋ぐ FirebaseTestingModule を作成
  • 既存のテストに不足しているモジュールを追加

master ブランチマージ時に Firebase Hosting へのデプロイが動かない

概要

PR を master ブランチにマージした時に Firebase Hosting の本番環境にデプロイする Actions が走らない

再現手順

  1. master に何かコミットする

期待される動作

key: ${{ runner.os }}-npm-${{ hashFiles("**/package-lock.json") }}

hashFiles"' に直す

スクリーンショット

No response

Sticker モデル、StickerGroup モデルを追加

要約

NFCタグを表す Sticker モデルを追加
StickerService を作成する

やること

sticker.model.ts を追加

export enum StickerStatus {
  /** StickerGroup が登録された直後。Item は設定されていない。 */
  unset = "unset";
  /** Sticker を Item に関連付けた直後の状態。 */
  set = "set";
  /** Item を Storage に登録した状態。 */
  stored = "stored";
  /** Sticker は使用済みで無効。 */
  void = "void";
};

export type Sticker = {
  id: string;
  itemId?: Item["id"];
  setAt?: Timestamp;
  storedAt?: Timestamp;
  storageId?: Storage["id"];
  setBy?: string;  // TODO: User["id"] に変更する
  storedBy?: string; // TODO: User["id"] に変更する
  status: StickerStatus;
  groupId: StickerGroup["id"];
};

// ↓ ユーザーが知る必要はないのでモデル登録不要かも
export type StickerGroup = {
  id: string;
};

Items のカウントを Storage 毎に設定できるようにする

TL;DR

現状は在庫場所が違うと別の Item として発行されてしまうので、品目を Storage 間で移動するとき都合が悪い。
一つの Item にすべての Storage の残数を登録できるようにする。

やること

item.model.ts を置き換える。

{
- storage: string; 
- count: number;
+ total: number; // 全 Storage の残数の合計
+ storedCount: { [storageId: string]: number };
+ createdAt: Timestamp;
+ updatedAt: Timestamp;
}

https://firebase.google.com/docs/reference/js/firestore_.timestamp

Storage コレクションを追加する

TL;DR

倉庫・店舗を表す Storage コレクションを、Firestore に書き込めるようにする

やること

  • store.model.ts -> storage.model.ts に変更、type Storage を作る
  • Storageid: stringname: string をもつ
  • StorageService を作成、FirestoreBase<Storage> を extend

ng g service services/storage

メンバーにクレームを設定し認可機構を導入

経緯・理由

基本的に Firebase Auth は誰でもアカウント作成ができるので、カスタムクレームを持っている人にだけ在庫データへのアクセスを許したい

追加内容詳細

従業員権限を持っているユーザーだけが在庫情報にアクセスできるようにする
取引先権限があってもいいかもしれないが、今はやらない

完了要件

  • アカウントを作成・ログインして、member クレームがあるユーザーにだけ品目や取引先、注文情報を見せる

  • member クレームは他の member によって付与できる

  • member クレームを持っていないユーザーは、プロフィール編集のみができる

手順・方法

  • メンバーモデルを追加
  • メンバー一覧画面を作る
  • プロフィール編集画面を作る
  • メンバー一覧からクレームの付与
    • フロントエンド
    • Firebase Functions
  • AuthGuard 実装
  • セキュリティルール実装

その他の解決方法

No response

ログイン画面が真っ白になる

概要

非ログイン状態で / にアクセスした時、アプリタイトルだけが表示されている状態になる。

再現手順

  1. ログアウトする
  2. / にアクセスする

期待される動作

ログイン画面に遷移し、電話番号の入力フォームが表示される。

スクリーンショット

image

HTMLの言語を日本語にする

概要

language="en" が設定されている
自動翻訳が要らぬ仕事をしてしまう可能性があるので、日本語に直す

再現手順

  1. トップページにナビゲートする
  2. ソースを見る

期待される動作

Webページの言語が日本語になっているようにする
src/index.html を直す

スクリーンショット

No response

シードを導入する

経緯・理由

Firebase emulators を入れ、データベースが起動毎に初期化されてしまうので、
初期データの投入ができるようにする

追加内容詳細

エミュレータにシードデータを投入する npm run seed を実装

完了要件

上記スクリプトを実行することで、ユーザー、(Storage)、Item、Customer、(History)、Order の初期データが登録されている状態になること。

手順・方法

  • シードをJSONで書く
  • ランダム生成するスクリプトを書く
  • Firebase emulators のエクスポートをリポジトリに含める

その他の解決方法

No response

ログアウトボタンを追加する

経緯・理由

#38 を直すときにログアウトができないと確認ができない

追加内容詳細

  • ヘッダー右端にログアウトアイコンボタンを追加する

完了要件

  • ボタンを追加する
  • 押したときにログアウトできる

手順・方法

  • mat-icon-button を使う
  • @angular/fire/auth で signOut する

その他の解決方法

No response

ルートごとのタイトルを設定する

経緯・理由

現在はタイトルが「深川珈琲 在庫管理」で決め打ちになっておりユーザビリティ上の問題がある

追加内容詳細

「品目 - 深川珈琲 在庫管理」とか
「{取引先名} - 取引先 - 深川珈琲 在庫管理」とか
「注文書 - {取引先名} - 取引先 - 深川珈琲 在庫管理」とか
「注文入力 - 深川珈琲 在庫管理」とか

完了要件

  • ページタイトルが適当に設定されていること

手順・方法

  • 静的なタイトルはルーティングの title: を使う
  • 動的なタイトルは Title サービスを使って設定する

その他の解決方法

titleStrategy で動的に設定することもできるようなので併用可能か調べる

品目詳細が開けない

概要

品目一覧から品目を選択したとき、詳細画面に移動しない

再現手順

  1. ログインする
  2. 品目を選択する
  3. 詳細に遷移しない

期待される動作

品目詳細画面が開くこと

スクリーンショット

No response

Angular 14 へのアップデート

経緯・理由

  • セキュリティの勧告がきている
  • Reactive Forms の新機能を試したい

https://blog.angular.io/angular-v14-is-now-available-391a6db736af

追加内容詳細

  • Angular v14 へのアップデート
  • フォームの書き換え

完了要件

  • Angular のバージョンを 14系にする
  • Reactive Form の書き換えを行う
  • タイトル設定は別 issue で

手順・方法

  • ng update
  • npx npm-check-updates -u
  • npm i

その他の解決方法

No response

品目追加で入力欄が出ない

概要

/items から品目を追加しようとしたとき、入力フォームに material design があたっておらず、
普通の input が見えてしまっている。

再現手順

  1. http://localhost:4200/item を開く
  2. 左下の + ボタンを押す
  3. ダイアログが立ち上がるが中身のフォームがおかしい

期待される動作

ダイアログの中に material design の入力欄とラベルが表示されている状態にする

スクリーンショット

image

CONTRIBUTING.md を書く

経緯・理由

  • GitHub でのチーム開発に不慣れな人でも開発に参加できるようにしたい
  • オープンソースプロジェクトの秩序を保ちたい

追加内容詳細

.github/CONTRIBUTING.md を追加する

完了要件

以下の内容を書く

  • 開発タスクには Issue を作成する
  • 大きなタスクは Issue を親子関係にしてチェックボックスで管理する
  • Outside collaborator の開発参加方法
  • Issue の運用について
  • Issue、PR のテンプレート利用について
  • ドキュメントについて

手順・方法

No response

その他の解決方法

No response

注文が見れない

取引先→注文入力→送信
実行後に注文でデータを確認できない

Issue template を追加する

経緯・理由

kaito さんの書いてくれた issue の大枠が良かったので、自分が issue を作るときに真似られるようにしたい

追加機能

以下の内容のテンプレートを作ってみる

  • 機能追加用
    • 経緯・理由
    • 追加機能
    • 完了要件
    • 手順
    • 他の手段
  • バグ報告用
    • 概要
    • 再現手順
    • 期待される動作
    • スクリーンショット

完了要件

  • issue template のマークダウンが追加され issue 作成時に参照できる

手順

設定画面から上記の内容の md ファイルを追加する

PC ログイン画面のレイアウトを改善したい

概要

ログイン画面の入力欄が全幅にわたって表示されて見にくい

再現手順

  1. ログアウトする

期待される動作

400-500px 幅くらいで**にカードが表示されている状態にしたい

スクリーンショット

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.