Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added trello/cmd/app/app
Binary file not shown.
90 changes: 90 additions & 0 deletions trello/cmd/app/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package main

import (
"log"
"trello/internal"
entity "trello/internal/Entity"
user "trello/internal/User"
)

func main() {
user1 := user.CreateUser("idASASXC", "Ayush", "ayu@gmail.com")
user2 := user.CreateUser("idLSYDIC", "Lucy", "ayu@gmail.com")

project := internal.CreateManager()
project.AddUser(user1)
project.AddUser(user2)

board1 := entity.CreateBoard("idBOARD2323", "INTERVIEW PREP", "PRIVATE")
board2 := entity.CreateBoard("idBOARD3454", "HOUSEHOLD", "PUBLIC")

list1 := entity.CreateList("idLIST2334", "BINARY TREE QUES")
list2 := entity.CreateList("idLIST4564", "DP QUES")

card1 := entity.CreateCard("idCARD2323", "Is This tree perfect?", "For a given tree, check if it is perfect : Google the meaning", nil)
card2 := entity.CreateCard("idCARD4322", "Print inorder traversal", "For a given tree, print the values in inorder traversal", user1)

card3 := entity.CreateCard("idCARDe5w4", "LCS", "Find the Longest common subsequence in the given string", user2)

// list3 := entity.CreateList("idLIST4564", "Groceries to buy")

card4 := entity.CreateCard("idCARD8978", "Aloo", "buy Aloo macha", user1)
// card5 := entity.CreateCard("idCARD8978", "Jeera", "buy Jeera macha", user2)

project.AddEntity(board1)
project.ShowEntitites(board1.Id)
log.Println("1-------------")

project.UpdateBoard(board1.Id, "NAME", "Google Crack!", "", nil)
project.UpdateBoard(board1.Id, "PRIVACY", "", "PUBLIC", nil)

project.ShowEntitites(board1.Id)
log.Println("2-------------")

project.AddEntity(board2)

project.UpdateBoard(board1.Id, "ADD_MEMBER", "", "", user1)
project.UpdateBoard(board1.Id, "ADD_MEMBER", "", "", user2)

project.UpdateBoard(board1.Id, "REMOVE_MEMBER", "", "", user2)

project.ShowEntitites(board1.Id)
log.Println("3-------------")

project.ShowEntitites("")
log.Println("4-------------")

project.AddEntity(list1)
project.ShowEntitites(list1.Id)
log.Println("5-------------")

project.AddEntity(list2)

project.ShowEntitites(board2.Id)
log.Println("6-------------")

project.AddEntity(card1)
project.AddEntity(card2)
project.AddEntity(card3)
project.AddEntity(card4)
project.AddEntity(card4)

project.AddChildToEntity(list1.Id, card1.Id)
project.AddChildToEntity(list1.Id, card2.Id)

project.AddChildToEntity(board1.Id, list1.Id)

project.ShowEntitites(list1.Id)
log.Println("7-------------")

project.AddParentToEntity(list2.Id, card1.Id)

project.ShowEntitites(list1.Id)
log.Println("8-------------")
project.ShowEntitites(list2.Id)
log.Println("9-------------")

project.ShowEntitites("")
log.Println("10-------------")

}
3 changes: 3 additions & 0 deletions trello/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module trello

go 1.24.3
109 changes: 109 additions & 0 deletions trello/internal/Entity/board.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package entity

import (
"log"
user "trello/internal/User"
)

const (
urlPrefix = "https://ayush.trello.com/boards/"
)

type Board struct {
Entity
Privacy string
Url string
Members map[string]*user.User
}

func CreateBoard(id, name, privacy string) *Board {
if privacy == "" {
privacy = "PRIVATE"
}
return &Board{
Entity: Entity{
Id: id,
Name: name,
ChildrenEntities: make(map[string]IEntity),
},
Privacy: privacy,
Members: make(map[string]*user.User),
Url: urlPrefix + id,
}
}

func (b *Board) Update(updateType string, name string, privacy string, member *user.User) {
switch updateType {
case "PRIVACY":
b.Privacy = privacy
break
case "NAME":
b.Name = name
break
case "ADD_MEMBER":
if member != nil {
b.AddMember(member)
}
break
case "REMOVE_MEMBER":
if member != nil {
b.RemoveMember(member)
}
break
}
}

func (b *Board) AddMember(member *user.User) {
if _, ok := b.Members[member.Id]; ok {
log.Println("BOARD AddMember user " + member.Id + " already exists in board " + b.Id)
return
}
b.Members[member.Id] = member
}
func (b *Board) RemoveMember(member *user.User) {
if _, ok := b.Members[member.Id]; !ok {
log.Println("BOARD RemoveMember user " + member.Id + " does not exist in board " + b.Id)
return
}
delete(b.Members, member.Id)
}

func (b *Board) AddChildEntity(childEntity IEntity) {
if childEntity.GetType() == "LIST" || childEntity.GetType() == "CARD" {
b.ChildrenEntities[childEntity.GetId()] = childEntity
}
}
func (b *Board) RemoveChildEntity(childEntity IEntity) {
delete(b.ChildrenEntities, childEntity.GetId())
}

func (b *Board) AddParent(newParent IEntity) {
log.Println("Board Cannot have a parent")
}

func (b *Board) Show() {
log.Printf("BOARD :: id - %s, name - %s, privace - %s", b.Id, b.Name, b.Privacy)
if len(b.Members) > 0 {
log.Println("Members of this board:")
for _, v := range b.Members {
v.Show()
}
}
if len(b.ChildrenEntities) > 0 {
log.Printf("Entities under this board:")
for _, v := range b.ChildrenEntities {
v.Show()
}
}
}

func (b *Board) Destroy() {
for k, v := range b.ChildrenEntities {
v.Destroy()
delete(b.ChildrenEntities, k)
}
}

func (c *Board) GetType() string {
return "BOARD"
}
72 changes: 72 additions & 0 deletions trello/internal/Entity/card.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package entity

import (
"log"
user "trello/internal/User"
)

type Card struct {
Entity
Desc string
Assignee *user.User
}

func CreateCard(id string, name string, desc string, assignee *user.User) *Card {
return &Card{
Entity: Entity{
Name: name,
Id: id,
},
Desc: desc,
Assignee: assignee,
}
}

func (c *Card) Assign(assignee *user.User) {
c.Assignee = assignee
}

func (c *Card) Update(updateType, name, desc string, assignee *user.User) {

switch updateType {
case "NAME":
c.Name = name
break
case "DESC":
c.Desc = desc
break
case "ASSiGNEE":
c.Assignee = assignee
break
}
}

func (c *Card) Show() {
assignedTo := "No One"
if c.Assignee != nil {
assignedTo = c.Assignee.Name
}
log.Printf("CARD :: id - %s, name - %s, desc - %s, assigned to - %s", c.Id, c.Name, c.Desc, assignedTo)
}

func (c *Card) AddParent(newParent IEntity) {
if newParent.GetType() == "BOARD" || newParent.GetType() == "LIST" {
c.Parent = newParent
} else {
log.Println("Card cannot have parents other than BOARD or LIST")
}
}

func (c *Card) AddChildEntity(childEntity IEntity) {
log.Println("Card cannot have a child Entity")
}
func (c *Card) RemoveChildEntity(childEntity IEntity) {
log.Println("Card cannot remove a child Entity")
}
func (c *Card) GetType() string {
return "CARD"
}

func (c *Card) Destroy() {

}
27 changes: 27 additions & 0 deletions trello/internal/Entity/entity.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package entity

type Entity struct {
Id string
Name string
Parent IEntity
ChildrenEntities map[string]IEntity
}

func (e *Entity) GetId() string {
return e.Id
}

func (e *Entity) GetParent() IEntity {
return e.Parent
}

type IEntity interface {
GetId() string
Show()
Destroy()
GetType() string
GetParent() IEntity
AddChildEntity(entity IEntity)
RemoveChildEntity(entity IEntity)
AddParent(parentEntity IEntity)
}
61 changes: 61 additions & 0 deletions trello/internal/Entity/list.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package entity

import "log"

type List struct {
Entity
}

func CreateList(id string, name string) *List {
return &List{
Entity: Entity{
Id: id,
Name: name,
ChildrenEntities: make(map[string]IEntity),
},
}
}
func (l *List) Show() {
log.Printf("LIST :: id - %s, name - %s", l.Id, l.Name)
if len(l.ChildrenEntities) > 0 {
log.Printf("Cards under this list:")
for _, v := range l.ChildrenEntities {
v.Show()
}
}
}

func (l *List) AddChildEntity(childEntity IEntity) {
if childEntity.GetType() == "CARD" {
l.ChildrenEntities[childEntity.GetId()] = childEntity
}
}

func (l *List) RemoveChildEntity(childEntity IEntity) {
delete(l.ChildrenEntities, childEntity.GetId())
}

func (l *List) AddParent(newParent IEntity) {
if newParent.GetType() != "BOARD" {
log.Println("List cannot have a parent other than BOARD")
return
}
l.Parent = newParent
}

func (l *List) Update(updateType string, name string) {
if updateType == "NAME" {
l.Name = name
}
}

func (l *List) Destroy() {
for k, v := range l.ChildrenEntities {
v.Destroy()
delete(l.ChildrenEntities, k)
}
}

func (c *List) GetType() string {
return "LIST"
}
21 changes: 21 additions & 0 deletions trello/internal/User/user.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package user

import "log"

type User struct {
Id string
Name string
Email string
}

func CreateUser(id, name, email string) *User {
return &User{
Id: id,
Name: name,
Email: email,
}
}

func (u *User) Show() {
log.Printf("User :: Id - %s, Name - %s, Email - %s", u.Id, u.Name, u.Email)
}
Loading