---
# System prepended metadata

title: tryme-sns

---

# tryme-sns

## context アカウント
```plantuml
@startuml
top to bottom direction

package ユーザー集約 {
    entity User {
        ID
        email メールアドレス
        displayName　表示名
        imageUrl　画像
        isOnboard　オンボード済みかどうか　
    }
    
    class UserAccount {
        provider
        providerAccountId
    }
    
    note bottom of UserAccount
        同じメールアドレスの場合、単一のアカウントを参照
        異なるメールアドレスの場合、異なるアカウントが作成される
    end note
    
    class BankAccount {
        id
        bankName 銀行名
        branchNumber 支店番号
        bankNumber 口座番号
        holderName 口座名義人名
    }
    
    class Skilltree {
        ID
        index
        exprience 経験年数
        skills スキル
    }
    
    note top of Skilltree
        エンジニアに対して3つまで
    end note
    
    class ExprienceSkill {
        name スキル名
        isMainSkill　メインスキルか
        displayName　表示名
        kind　種類
        imageUrl　タグ
        description　詳細
    }
    
    note bottom of ExprienceSkill
        スキルツリーに対して3つまで
    end note
    
    class DesiredCondition {
        id
        hourlyRate 時間単価
        weeklyworkingTime 週の稼働可能時間
    }
    
    note bottom of DesiredCondition
        時間単価:2000円-10000円
        稼働可能時間:最大30時間
    end note
    
    entity Activity {
        ID
        type タイプ
        isRead 既読か
        message メッセージ
        path リンクURL
    }
    
    User "1" o-- "n" UserAccount
    User "1" o-- "1" BankAccount
    User "1" o-- "1" DesiredCondition
    User"1" o-- "n" Skilltree
    Skilltree "1" o-- "n" ExprienceSkill
    User "1" o-- "n" Activity
}

@enduml
```

```plantuml
@startuml

package ユーザー集約(フォロー＆フォロワー) {
    entity User {
        ID
        myFollwers
        followingUsers
    }
    
    entity FollowersOnUsers {
        ID
        userId
        follwerId
    }
}

User "n" o-- "n" FollowersOnUsers

@enduml
```

## context オファー送信

```plantuml
@startuml
hide method
top to bottom direction

package ユーザー集約 {
    entity User {
        ID
        email メールアドレス
        displayName　表示名
        imageUrl　画像
    }

    User "1" o-left- "n" Offer
    User "1" o-left- "n" Issue
}

package Offer {
    entity Offer {
        title 題名
        description 詳細
        hourlyRate 時間単価
        time 稼働可能時間
        status 状態
    }

    note left of Offer
        企業が条件を作成し、エンジニアに送信する
        エンジニアのステータスが稼働中の時は送れない
        時間単価:2000円-10000円
        稼働可能時間:最大30時間
        issueの内容をコピーして作成する
    end note
    
    enum status {
        SENDING 送信済
        DECLINED 拒否
        WAIT_DEPOSITE　入金待ち
        CHECKING_DEPOSITE　入金確認待ち
        WORKING 稼働中
        WAIT_EVALUATION　評価待ち
        WAIT_PAYMENT 支払い待ち
        COMPLETED　完了
    }
    
    note bottom of status
        CHECKING_DEPOSITEからWORKINGは運営側が変更
        WAIT_PAYMENTの状態で運営がエンジニアに振込を行う
    end note
    
    class RequiredSkill {
        id
        name
        displayName
        kind
        imageUrl
        description
    }
    
    note right of RequiredSkill
        3つまで設定可能
    end note
    
    Offer "1"--"1" status
    Offer "1" o-- "n" RequiredSkill 
}


package Issue {
    entity Issue {
        title 題名
        description 詳細
        hourlyRate 想定時間単価
        time 想定稼働時間
        requiredSkills 必要なスキル
    }
    
    note bottom of Issue
        Postに添付することが出来る
        issuePostの下書き
        編集・削除できる
    end note
}

@enduml
```

## context 投稿

```plantuml
@startuml

entity User {
    ID
    displayName　表示名
    imageUrl　画像
    
    posts 自分の投稿一覧
    likedPosts LikedUsersOnPosts[]
}

package Post {
    
    entity Post {
        id
        text
        status
        publishedAt
        type
        
        /'issueの要素をコピー'/
        title 題名
        description 詳細
        hourlyRate 想定時間単価
        time 想定稼働時間
        requiredSkills 必要なスキル
        
        owner 投稿者
        likedUsers LikedUsersOnPosts[]
        
        url メディアurl
        
        parentId?
        parent Post
        children Post[]
    }
    
    '多対多: /https://www.prisma.io/docs/concepts/components/prisma-schema/relations/many-to-many-relations/'
    entity LikedUsersOnPosts {
        postId
        post
        userId
        user
    }
    
    enum PostStatus {
        DRAFT
        PUBLISHED
    }
    
    enum PostType {
        TEXT
        ISSUE
        MEDIA
    }
    
    note top of Post
        親Postには子供Post合計数を表示する
        親Postをクリックすると詳細画面で子供Postの一覧が表示される
        user全体に公開される
        issueをコピーする
        下書きを作成できる
        編集不可、削除可
    end note
}

User "1" o-- "n" Post
Post "1" o-- "1" PostStatus
Post "1" o-- "1" PostType
Post "1" o-- "n" Post
Post "n" o-- "n" LikedUsersOnPosts
User "n" o-- "n" LikedUsersOnPosts

@enduml
```
