# Software Design - Sketch
## Idea
> ⚠️ Just a sketch.
`nikolaus.dao`
> 1 day dao for your scraps imps exchange on December 6.
### Problem
Don't have a present for `scrap imps exchange` gathering.
<details>
<summary>Read More</summary>
There is a common tradition in many places on December 6 alias Nicholaus day. </br>
It called Trash imping.(literally translated from german)</br> </br>
How does it work?</br>
You buy something funny for a certain defined range of value.</br>
f.e. something funny for around 10 bucks. </br>
You come together with your friends.</br>
Everyone throws his thingy in. </br>
It gets redistrubed. </br>
Some people are happy, some people are sad but everyone had a big fun </br>
Ok now we know whats trash imping.
Nikolaus DAO is a group of people.
Everyone can joins and throws his 3D prompt in.
The contracts stores it.
A 3d Models gets created and stored on the chain.
Everything is own by you.
December 6 is happening.
All the 3d models are getting randomly redistrubted.
All of them get printed and send to their new owners.
Now you are the proud owner of a 3d modeled present created by one of your Nikolaus fellow.
Happy Nikolaus Day 🎁
</details>
### Solution
`nikolaus.dao`
## Requirements
### Functional Requirments
- The User should be able to become a member
- The User should be able to participate
- The SmartContract should handle the distrubiton
- The Backend should be able create ai 3D Model
- The Backend should be able to add 3D Model to chain
### Non Functional Requirmentens
- The WebApp should have a simple UI
## Diagrams
### UseCase
```plantuml
!theme plain
left to right direction
skinparam actorStyle awesome
Backend --> ("create 3D")
Backend --> ("add to Chain")
SmartContract --> (redistribute)
User --> (become Member)
User --> (participate)
```
### Class
```plantuml
class NikolausDAO{
+members: address[]
+prompts: string[]
+models: cid[]
+picture: cid[]
+become_member()
+add_prompt()
+add_model()
+get_all_model()
+get_model()
}
```
### Sequence
```plantuml
actor User
entity WebApp
entity Backend
database SmartContract
group Members joins
Backend -> SmartContract: "listens"
User -> WebApp: "become_member('prompt')"
WebApp -> SmartContract: "become_member('prompt')"
Backend -> Backend: "create 3D, create cid"
Backend -> SmartContract: "add_models('user')"
end
group "6th December"
SmartContract -> SmartContract: "redistrubed"
Backend -> Backend: "print"
Backend -> User: "delivered"
end
```
<details>
<summary>Show more</summary>
<img src="https://i.ibb.co/8PSHLg2/image.png" widht=500 height=250/>
</details>
## Notes
- Wanna add webar and show all presents on your nikloaus dao plate. (lets see, time consuming)
- w.i.p.