---
# System prepended metadata

title: Reputation Data Types | CRUD Operations

---

# Reputation Data Types | CRUD Operations

*For more Reputation Modules [see this url.](https://sacred-capital.gitbook.io/sacred-capital/documentation/technical/reputation-data-types)*

*Design is in keeping with principles of modularity that are [discussed here.](https://hackmd.io/@TJSptuQkSdWyLgQxZrAUGg/S1RSmuptU)*

Reputation Modules are designed as separate DHT's that can bridge into any existing app. This allows a community to pick which reputation module is appropriate for them and choose between specific features. 

For example, a community can swap out a 'likes' module and instead decide to incorporate 'claps' or 'upvotes/downvotes' based on how they wish to articulate culture within their collective. 

They do so by picking a DNA template, and adding their community's unique identifier in the 'properties' field to spin-off a new DHT. 

![](https://i.imgur.com/8Aju8wB.png)


## Reputation Likes

**Entry Creation:** 
-    Only 1 'like' per user per base entry allowed. 

**Read:**
-    No of likes given by user: Retrieve Entries that match AgentAddress of the user who generated the like.
-    No of likes received by a Base Entry: Retrieve Entries that match the UID of the Base Entry
-    No of likes received by a user across all base entries? (Will need bridging)

**Update:** 
-    Not relevant

**Delete:** 
-    Only user who generates a like can delete
-    Can the owner of Base entry also delete? (Will need bridging)
    -    when base entry is deleted, like can be removed by non-author
    -    need to be able to verify that base entry is deleted. When reputation is a separate DNA, we can only do that reliably by directly bridging into base entry's DNA.
    -    looks like a nice use-case for signal/slots: we could've subscribed for base entry deletion in another DNA.  But this is just a dream about functionality that doesn't yet exist :) 


Notes for UI Development:
-    Calling the like function when a like already exists deletes the like. 

## Claps

We consider the case of 'each clap designed as separate entry'. Later sections will consider no. of claps created as fields in a struct. 

**Entry Creation:** 
-    Upto 'n' 'claps' per user per Based Entry allowed at any given point of time. 

**Read:**
-    No of claps given by user: Retrive Entries that match AgentAddress of the user who generated the clap.
-    No of claps received by a base entry: Retrieve Entries that match the UID of the Base Entry
-    No of claps received by a user across all base entries? (Will require bridging)

**Update:** 
-    Not relevant

**Delete:** 
-    Only user who generates claps can delete
-    Can the owner of Base entry also delete? (Will require bridging)

Notes for UI Development:
-    Calling the clap function when a clap already exists increments the count of claps.
-    Calling the clap function when max no. of claps has been reached results in no action.

## Upvotes/Downvotes (Similar structure works for a spectrum of Emojis, or a rating system)

We consider the case of Upvotes/Downvotes created as separate functions. Later sections will consider Upvotes/Downvotes created as fields in a struct.

**Entry Creation:** 
-    Either 1 upvote, or 1 downvote per user per base entry allowed at any given point of time. 

**Read:**
-    No of upvotes/downvotes given by user: Get Entries that match AgentAddress of the user who generated the upvote/downvote.
-    No of upvotes/downvotes received by a base entry: Get Entries that match the UID of the Base Entry
-    No of upvotes/downvotes received by a user across all base entries? 

**Update:** 
-    Not Relevant

Notes for UI Development:
-    Calling the upvote function when upvote already exists deletes the existing entry. Same for downvotes
-   Calling the downvote function when upvote exists, deletes the upvote entry and passes a new downvote entry. Vice versa for calling the upvote function when downvote exists.

**Delete:** 
-    Only user who generates upvotes/downvotes can delete
-    Can the owner of Base entry also delete?