---
# System prepended metadata

title: 共通リスト重複機能メモ
tags: [メモ, 処理プロセス]

---

# 共通リスト重複機能メモ

###### tags: `メモ` `処理プロセス`

参考: [Github](https://github.com/imejin-dev/form-sales-bot/pull/280/files)


### プロセス

まず、CSVをアップロード
POST api/v1/companies/import_csv

> Controller

CSVをエンコード、配列に変換。そしてforeachで回す。
以下項目を使い１つずつインスタンス生成。最後にsave!する。

- company_name（会社名）
- address（住所）
- url（企業URL）
- category（カテゴリー）
- num_employees（従業員数）
- founded_in（設立年）
- tel（電話番号）
- fax（Fax）

この項目は文字列でCSVの内容をそのまま保存している。
なので電話番号が`00000000000`でも`000-0000-0000`でも内容そのまま保存される。その他項目も同様。

そして保存時に、`after_create`で重複チェックを行う。

> company_name （会社名）

以下への変換後に既存データからlike検索。
結果が存在すれば重複とみなす。

1. ローマ字小文字
2. ローマ字大文字
3. カタカナ
4. ひらがな

> url（企業URL）

Domainを抽出し、like検索。
結果が存在すれば重複とみなす。





### SQL

```bash:
companies" WHERE "companies"."is_duplicate" = $1 AND "companies"."id" != $2 AND (company_name like '%%' or
2020-11-10T00:29:27.912042+00:00 app[web.1]: company_name like '%%' or
2020-11-10T00:29:27.912043+00:00 app[web.1]: company_name like '%%' or
2020-11-10T00:29:27.912043+00:00 app[web.1]: company_name like '%%' or
2020-11-10T00:29:27.912044+00:00 app[web.1]: url like '%www.mizuku.co%' or
2020-11-10T00:29:27.912044+00:00 app[web.1]: address like 'u' or
2020-11-10T00:29:27.912045+00:00 app[web.1]: tel like '059-332-6600' or
2020-11-10T00:29:27.912045+00:00 app[web.1]: fax like NULL)  [["is_duplicate", false], ["id", 29]]
```





```sequence
ユーザー->ブラウザ: 共通リスト作成\nCSVをアップロード\n
ブラウザ->サーバー: POST api/v1/companies/import_csv
サーバー-->ブラウザ: :hashからPayment情報を検索して返す\n
ブラウザ-->ユーザー: Payment情報を元に、\n金額等を表示
ユーザー->ブラウザ: カード情報（番号、有効期限、CVC）\nを入力して決済実行
ブラウザ->ブラウザ: カード情報を元にPayjpAPIを叩いて\n決済tokenを取得
ブラウザ->サーバー: post api/v1/payment/:token
サーバー->サーバー: tokenを使って決済
ブラウザ->ユーザー: 決済エラーが発生しなければ、\n決済完了ページに遷移
```