From 97319695aa5a6ba29ad6cabfc26881e563580484 Mon Sep 17 00:00:00 2001 From: Bahamin1 Date: Tue, 18 Jun 2024 19:54:21 +0300 Subject: [PATCH] update user and employee add new future --- src/Dorder/Employee.mo | 93 +++++++++++++++++ src/Dorder/Log.mo | 23 +++-- src/Dorder/Menu.mo | 65 ++++++------ src/Dorder/Review.mo | 58 ++--------- src/Dorder/Table.mo | 100 +++++++++--------- src/Dorder/main.mo | 225 +++++++++++++++++++---------------------- 6 files changed, 300 insertions(+), 264 deletions(-) create mode 100644 src/Dorder/Employee.mo diff --git a/src/Dorder/Employee.mo b/src/Dorder/Employee.mo new file mode 100644 index 0000000..26564bc --- /dev/null +++ b/src/Dorder/Employee.mo @@ -0,0 +1,93 @@ +import Map "mo:map/Map"; +import { phash } "mo:map/Map"; + +import Review "Review"; + +module { + + public type UserRole = { + #Guest; + #Customer; + #Employee; + #Manager; + #Admin; + }; + + public type Operation = { + #ReserveTable; + #UnreserveTable; + #PayTable; + #MonitorLogs; + #HireManager; + #FireManager; + #HireEmployee; + #FireEmployee; + #ModifyTable; + #ModifyMenuItem; + #ModifyMenuItemPoint; + #ModifyEmployeePoints; + }; + + public type Employee = { + name : Text; + principal : Principal; + role : UserRole; + allowedOperations : [Operation]; + id : Nat; + image : ?Blob; + review : [Review.EmployeeReview] + + }; + + public type EmployeeMap = Map.Map; + + public func get(userMap : EmployeeMap, principal : Principal) : ?Employee { + return Map.get(userMap, phash, principal); + }; + + // put Employee + public func put(userMap : EmployeeMap, p : Principal, user : Employee) : () { + return Map.set(userMap, phash, p, user); + }; + + // add New user specefic with oprations + public func new(userMap : EmployeeMap, principal : Principal, name : Text, role : UserRole, allowedOperations : [Operation]) : () { + let id = Map.size(userMap) +1; + + let user : Employee = { + name = name; + principal = principal; + role = role; + allowedOperations = allowedOperations; + id = id; + image = null; + buyingScore = 0; + review = []; + order = null; + }; + + put(userMap, principal, user); + + return; + }; + + public func canPerform(userMap : EmployeeMap, p : Principal, operation : Operation) : Bool { + let user = get(userMap, p); + + switch (user) { + case (null) { + return false; + }; + case (?user) { + if (user.role == #Admin) return true; + + for (o in user.allowedOperations.vals()) { + if (operation == o) return true; + }; + + return false; + }; + }; + }; + +}; diff --git a/src/Dorder/Log.mo b/src/Dorder/Log.mo index 0c318d7..1281035 100644 --- a/src/Dorder/Log.mo +++ b/src/Dorder/Log.mo @@ -9,7 +9,7 @@ module { id : Nat; message : Text; createdAt : Time.Time; - catagory : Catagory + catagory : Catagory; }; public type Catagory = { @@ -18,13 +18,14 @@ module { #Menu; #Order; #EmployeeReview; - #MenuReview + #MenuReview; + #Personnel; }; public type LogMap = Map.Map; public func put(logMap : LogMap, key : Nat, value : Log) : () { - return Map.set(logMap, nhash, key, value) + return Map.set(logMap, nhash, key, value); }; public func add(logMap : LogMap, catagory : Catagory, message : Text) : () { @@ -34,12 +35,12 @@ module { id = id; message = message; createdAt = Time.now(); - catagory = catagory + catagory = catagory; }; put(logMap, id, newLog); - return + return; }; public func getLogsByCategory(logMap : LogMap, per : Catagory) : [Log] { @@ -50,12 +51,12 @@ module { case (is) { if (is == per) { - filteredLogs := Array.append(filteredLogs, [cata]) - } - } - } + filteredLogs := Array.append(filteredLogs, [cata]); + }; + }; + }; }; return filteredLogs; - } -} + }; +}; diff --git a/src/Dorder/Menu.mo b/src/Dorder/Menu.mo index eaa8659..e89c8dd 100644 --- a/src/Dorder/Menu.mo +++ b/src/Dorder/Menu.mo @@ -16,8 +16,8 @@ module { price : Nat; stock : Bool; description : Text; - star : [Review.MenuReview]; - image : ?Blob + score : [Review.MenuReview]; + image : ?Blob; }; public type NewMenuItem = { @@ -32,12 +32,12 @@ module { public type MenuMap = Map.Map; public func get(menuMap : MenuMap, key : Nat) : ?MenuItem { - return Map.get(menuMap, nhash, key) + return Map.get(menuMap, nhash, key); }; // MenuItem put to map public func put(menuMap : MenuMap, key : Nat, value : MenuItem) : () { - return Map.set(menuMap, nhash, key, value) + return Map.set(menuMap, nhash, key, value); }; public func new(menuMap : MenuMap, newMenuItem : NewMenuItem) : () { @@ -49,18 +49,18 @@ module { price = newMenuItem.price; stock = newMenuItem.stock; description = newMenuItem.description; - star = []; - image = newMenuItem.image + score = []; + image = newMenuItem.image; }; put(menuMap, itemId, newMenu); - return + return; }; public func update(menuMap : MenuMap, menuId : Nat, newMenuItem : NewMenuItem) : Result.Result { switch (get(menuMap, menuId)) { case (null) { - return #err("The menu item with id " #Nat.toText(menuId) # " does not exist!") + return #err("The menu item with id " #Nat.toText(menuId) # " does not exist!"); }; case (?item) { let updateItem : MenuItem = { @@ -70,14 +70,14 @@ module { price = newMenuItem.price; stock = newMenuItem.stock; description = newMenuItem.description; - star = item.star; - image = newMenuItem.image + score = item.score; + image = newMenuItem.image; }; put(menuMap, menuId, updateItem); return #ok("The menu item with id " #Nat.toText(menuId) # " has been updated!"); - } + }; }; }; @@ -86,49 +86,44 @@ module { let menu = get(menuMap, menuId); switch (menu) { case (null) { - return false + return false; }; case (?menu) { - for (star in menu.star.vals()) { + for (star in menu.score.vals()) { if (star.pointBy == p) { - return true - } - } + return true; + }; + }; }; }; - return false + return false; }; - public func replaceMenuPointByPrincipal(menuMap : MenuMap, itemId : Nat, principal : Principal, newPoint : Review.MenuReview) : Bool { - switch (get(menuMap, itemId)) { - case (?item) { + public func replaceNewItemScore(menuItem : MenuItem, menuId : Nat, principal : Principal, newPoint : Review.MenuReview) : MenuItem { + switch (menuItem) { + case (item) { // Filter out the specific MenuReview let updatedPoints = Array.filter( - item.star, - func(star) { - star.pointBy != principal + item.score, + func(score) { + score.pointBy != principal; }, ); - // Add the new MenuReview let newPoints = Array.append(updatedPoints, [newPoint]); - // Update the MenuItem with the new points array - let updatedItem : MenuItem = { - id = itemId; + id = menuId; name = item.name; price = item.price; stock = item.stock; description = item.description; - star = newPoints; - image = item.image + score = newPoints; + image = item.image; }; - put(menuMap, itemId, updatedItem); - return true + return updatedItem; }; - case null { return false } - } - } -} + }; + }; +}; diff --git a/src/Dorder/Review.mo b/src/Dorder/Review.mo index 600b9bb..093095d 100644 --- a/src/Dorder/Review.mo +++ b/src/Dorder/Review.mo @@ -1,5 +1,5 @@ -import Time "mo:base/Time"; import Nat "mo:base/Nat"; +import Time "mo:base/Time"; module { public type MenuReview = { @@ -9,58 +9,22 @@ module { star : Star; suggest : Bool; cratedAt : Time.Time; - image : ?[Blob] - }; - - public type Star = { - #One; - #Two; - #Three; - #Four; - #Five + image : ?[Blob]; }; public type EmployeeReview = { pointBy : Principal; comment : ?Text; star : Star; - cratedAt : Time.Time + cratedAt : Time.Time; }; - public type Point = Nat; - - public type UserPoint = Point; - - // let nextPointId : Nat = 0; - // public func addMenuPoint(menuMap : Menu.MenuMap, menuId : Nat, p : Principal, cm : ?Text, star : Star, suggest : Bool, image : [Blob]) : Result.Result<(Text), Text> { - - // switch (M.get(menuMap, id)) { - // case (null) { - // return #err("The menu item with id " #Nat.toText(menuId) # " does not exist!"); - // }; - // case (?menu) { - // let newMenuPoint = Buffer.fromArray(menu.star); - // newMenuPoint.add({ - // comment = cm; - // pointBy = p; - // star = star; - // suggest = suggest; - // cratedAt = Time.now(); - // image = [image]; - // }); - - // nextPointId += 1; - - // let newMenuPoint : M.MenuItem = { - // name = menu.name; - // price = menu.price; - // description = menu.description; - // star = Buffer.toArray(newMenuPoint); - // image = ?Blob; - // }; - // }; - // }; - - // }; + public type Star = { + #One; + #Two; + #Three; + #Four; + #Five; + }; -} +}; diff --git a/src/Dorder/Table.mo b/src/Dorder/Table.mo index 5f0b7ed..6f5d592 100644 --- a/src/Dorder/Table.mo +++ b/src/Dorder/Table.mo @@ -21,7 +21,7 @@ module { reserveTime : ?Time.Time; userWantsToJoin : [Principal]; seatedCustomers : [Principal]; - order : ?Cart.Order + order : ?Cart.Order; }; public type TableMap = Map.Map; @@ -29,12 +29,12 @@ module { /////table get from map public func get(tables : TableMap, key : Nat) : ?Table { - return Map.get(tables, nhash, key) + return Map.get(tables, nhash, key); }; // table put to map public func put(tables : TableMap, key : Nat, value : Table) : () { - return Map.set(tables, nhash, key, value) + return Map.set(tables, nhash, key, value); }; // Initialize tables @@ -59,12 +59,12 @@ module { public func reserve(tables : TableMap, tableId : Nat, reservedBy : Principal) : Result.Result { switch (get(tables, tableId)) { case null { - return #err("Table ID out of range.") + return #err("Table ID out of range."); }; case (?table) { switch (table.reservedBy) { case (?reservedBy) { - return #err("Table already reserved.") + return #err("Table already reserved."); }; case (null) { let updatedTable : Table = { @@ -74,27 +74,27 @@ module { reserveTime = ?Time.now(); userWantsToJoin = []; seatedCustomers = []; - order = null + order = null; }; put(tables, tableId, updatedTable); - return #ok(tables) - } - } + return #ok(tables); + }; + }; }; - } + }; }; // Function to unreserve a table public func unreserve(tables : TableMap, tableId : Nat) : Result.Result { switch (get(tables, tableId)) { case null { - return #err("Table ID out of range.") + return #err("Table ID out of range."); }; case (?table) { switch (table.reservedBy) { case (null) { - return #err("Table already Free.") + return #err("Table already Free."); }; case (?reservedBy) { let updatedTable : Table = { @@ -108,32 +108,32 @@ module { }; put(tables, tableId, updatedTable); - return #ok(tables) - } - } + return #ok(tables); + }; + }; }; - } + }; }; // Function to check if a table is isReserved public func isReserved(tables : TableMap, tableId : Nat) : Bool { switch (get(tables, tableId)) { case (null) { - return false + return false; }; case (?table) { switch (table.reservedBy) { case (null) { - return false + return false; }; case (?reservedBy) { - return true + return true; }; - } - } - } + }; + }; + }; }; /** @@ -149,24 +149,24 @@ module { for ((tableId, table) in Map.entries(tables)) { switch (table.reservedBy) { case (null) { - return Buffer.Buffer(0) + return Buffer.Buffer(0); }; case (?p) { if (p == principal) { - reservedTables.add(tableId) - } - } - } + reservedTables.add(tableId); + }; + }; + }; }; - return reservedTables + return reservedTables; }; // Check if the table exists and is reserved by the specified principal. public func canUnreserveTable(employeeMap : User.EmployeeMap, tables : TableMap, p : Principal, tableId : Nat) : Bool { - switch (User.canPerform(employeeMap, p, #UnreserveTable)) { + switch (User.employeeCanPerform(employeeMap, p, #UnreserveTable)) { case (true) { - return true + return true; }; case (false) { if (isReserved(tables, tableId)) { @@ -177,20 +177,20 @@ module { case (null) { return false }; case (?reservedBy) { if (reservedBy == p) { - return true + return true; } else { - return false - } - } - } - } + return false; + }; + }; + }; + }; }; }; - } + }; }; - return false + return false; }; public func requestToJoinTable(tableMap : TableMap, tableId : Nat, p : Principal) : () { @@ -206,7 +206,7 @@ module { reserveTime = table.reserveTime; userWantsToJoin = addrequest; seatedCustomers = table.seatedCustomers; - order = table.order + order = table.order; }; return; @@ -232,11 +232,11 @@ module { reserveTime = table.reserveTime; userWantsToJoin = removedPrincipal; seatedCustomers = table.seatedCustomers; - order = table.order + order = table.order; }; put(tableMap, tableId, updatedUserWantsToJoin); - Debug.print("user successfully removed from wants to join") - } + Debug.print("user successfully removed from wants to join"); + }; }; switch (table.seatedCustomers) { @@ -250,26 +250,26 @@ module { reserveTime = table.reserveTime; userWantsToJoin = table.userWantsToJoin; seatedCustomers = newSeated; - order = table.order + order = table.order; }; put(tableMap, tableId, updatedSeatedCustomers); Debug.print("user successfully add to seated customer"); - return newSeated + return newSeated; }; - } - } - } + }; + }; + }; }; func removeElementFromArray(arr : [Principal], valueToRemove : Principal) : [Principal] { return Array.filter( arr, func(x : Principal) : Bool { - x != valueToRemove + x != valueToRemove; }, - ) + ); }; -} +}; diff --git a/src/Dorder/main.mo b/src/Dorder/main.mo index 8b57737..91a5944 100644 --- a/src/Dorder/main.mo +++ b/src/Dorder/main.mo @@ -7,7 +7,7 @@ import Result "mo:base/Result"; import Text "mo:base/Text"; import Time "mo:base/Time"; import Map "mo:map/Map"; -import { nhash } "mo:map/Map"; +import { nhash; phash } "mo:map/Map"; import Cart "Cart"; import Log "Log"; @@ -27,7 +27,7 @@ shared ({ caller = manager }) actor class Dorder() = this { stable var logMap : Log.LogMap = Map.new(); public shared ({ caller }) func getLogs(logs : Log.Catagory) : async Result.Result<[Log.Log], Text> { - if (User.canPerform(employeeMap, caller, #MonitorLogs) != true) { + if (User.employeeCanPerform(employeeMap, caller, #MonitorLogs) != true) { return #err("the caller " #Principal.toText(caller) # " dose not have permission Monitor Logs!"); }; return #ok(Log.getLogsByCategory(logMap, logs)); @@ -38,73 +38,63 @@ shared ({ caller = manager }) actor class Dorder() = this { stable var userMap : User.UserMap = Map.new(); stable var employeeMap : User.EmployeeMap = Map.new(); + User.new(userMap, guest, "bahamin", "bahamindehpour@gmail.com", #Admin, 09354706897, null, []); + User.hire(employeeMap, guest, #Admin, "Bahamin", "bahamindehpour@gmail.com", 09354706897, null, []); - User.new(employeeMap, guest, "ADMIN", #Admin, []); + public shared ({ caller }) func registerAndUpdateMember(name : Text, email : Text, number : Nat, image : ?Blob) : async (Text) { - public shared ({ caller }) func registerMemberNew(name : Text, image : ?Blob) : async Result.Result<(), Text> { - switch (User.get(employeeMap, caller)) { - case (?employee) { - return #err("User " # Principal.toText(caller) # " Already Registered!"); - }; - case (null) { - let allowedOperations = [ - #ReserveTable, - #PayTable, - #ModifyMenuItemPoint, - #ModifyEmployeePoints, - ]; - - User.new(employeeMap, caller, name, #Customer, allowedOperations); - Log.add(logMap, #Member, "Member " # Principal.toText(caller) # " has been Registered!"); - return #ok(); - }; + let allowedOperations = [ + #ReserveTable, + #PayTable, + #CanTakeAway, + #ModifyMenuItemPoint, + #ModifyEmployeePoints, + ]; + + User.new(userMap, caller, name, email, #Customer, number, image, allowedOperations); + + if (User.get(userMap, caller) == null) { + Log.add(logMap, #Member, "Member " # Principal.toText(caller) # " has been Added SuccessFully!"); + } else { + Log.add(logMap, #Member, "Member " # Principal.toText(caller) # " has been Updated SuccessFully!"); }; + + return "Wellcome!"; + }; - public shared ({ caller }) func addManager(principal : Principal, name : Text, allowedOperations : [User.Operation]) : async Result.Result<(), Text> { - if (User.canPerform(employeeMap, caller, #HireManager) != true) { + public shared ({ caller }) func hireOrUpdateEmployee(principal : Principal, role : User.UserRole, allowedOperations : [User.Operation]) : async Result.Result<(Text), Text> { + if (User.employeeCanPerform(employeeMap, caller, #Hire) != true) { return #err("The caller " # Principal.toText(caller) # " havent Opration for this func"); }; - - switch (User.get(employeeMap, principal)) { - case (?is) { - User.new(employeeMap, is.principal, is.name, #Manager, allowedOperations); - Log.add(logMap, #Member, "Member " #Principal.toText(principal) # " updated to Manager By " # Principal.toText(caller) # "!"); - return #ok(); - }; + //check if principal is a user or not ! must first user add to system first; + switch (Map.get(userMap, phash, principal)) { case (null) { - User.new(employeeMap, principal, name, #Manager, allowedOperations); - Log.add(logMap, #Member, "New Manager " # Principal.toText(principal) # " Added By " # Principal.toText(caller) # "!"); - return #ok(); + Log.add(logMap, #Personnel, "" #Principal.toText(caller) # " couldn't hire " # Principal.toText(principal) # " becuse didn't have an account in the system!"); + return #err("" #Principal.toText(principal) # " Must create an account on the system !"); + }; + case (?is) { + + User.hire(employeeMap, principal, role, is.name, is.email, is.number, is.image, allowedOperations); + Log.add(logMap, #Personnel, "" #Principal.toText(caller) # " hire or updated new Employee by " # Principal.toText(principal) # "!"); + return #ok("Success"); }; }; }; - public shared ({ caller }) func addEmployee(principal : Principal, name : Text, allowedOperations : [User.Operation]) : async Result.Result<(), Text> { - if (User.canPerform(employeeMap, caller, #HireEmployee) != true) { - return #err("The caller " # Principal.toText(caller) # " havent Opration for this func"); - }; + public shared query func getUser(p : Principal) : async ?User.User { + return User.get(userMap, p); + }; - switch (User.get(employeeMap, principal)) { - case (?is) { - User.new(employeeMap, is.principal, is.name, #Employee, allowedOperations); - Log.add(logMap, #Member, "Member " #Principal.toText(principal) # " updated to Employee By " # Principal.toText(caller) # "!"); - return #ok(); - }; - case (null) { - User.new(employeeMap, principal, name, #Employee, allowedOperations); - Log.add(logMap, #Member, "New Member " # Principal.toText(principal) # " Added By " # Principal.toText(caller) # "!"); - return #ok(); - }; - }; + public shared query func getAllUser() : async [User.User] { + return Iter.toArray(Map.vals(userMap)); }; - public shared func getMember(p : Principal) : async ?User.Employee { - let member = User.get(employeeMap, p); - return member; + public shared query func getEmployee(p : Principal) : async ?User.Employee { + return Map.get(employeeMap, phash, p); }; - public shared func getAllMembersNew() : async [User.Employee] { + public shared query func getAllEmployee() : async [User.Employee] { return Iter.toArray(Map.vals(employeeMap)); }; @@ -113,7 +103,7 @@ shared ({ caller = manager }) actor class Dorder() = this { stable var tableMap : Table.TableMap = Map.new(); public shared ({ caller }) func addTableNew(tableNumber : Nat, capacity : Nat) : async Result.Result<(Text), Text> { - if (User.canPerform(employeeMap, caller, #ModifyTable) != true) { + if (User.employeeCanPerform(employeeMap, caller, #ModifyTable) != true) { return #err("The caller " #Principal.toText(caller) # " dose not have permission to add table!"); }; @@ -138,7 +128,7 @@ shared ({ caller = manager }) actor class Dorder() = this { // The table you're trying to access is reserved. // Do you want to request to join this table? This will call the SeatOnTable function. public shared ({ caller }) func reserveTableNew(tableId : Nat) : async Result.Result { - if (User.canPerform(employeeMap, caller, #ReserveTable) != true) { + if (User.userCanPerform(userMap, caller, #ReserveTable) != true) { return #err("The caller " #Principal.toText(caller) # " dose not have permission Reserve Table!"); }; switch (Table.reserve(tableMap, tableId, caller)) { @@ -215,16 +205,16 @@ shared ({ caller = manager }) actor class Dorder() = this { stable var menuMap : Menu.MenuMap = Map.new(); public shared ({ caller }) func addMenuItem(newMenuItem : Menu.NewMenuItem) : async Result.Result { - if (User.canPerform(employeeMap, caller, #ModifyMenuItem) != true) { + if (User.employeeCanPerform(employeeMap, caller, #ModifyMenuItem) != true) { return #err("The caller " #Principal.toText(caller) # " dose not have permission to add menu item!"); }; Menu.new(menuMap, newMenuItem); - Log.add(logMap, #Menu, "New Menu Added By " #Principal.toText(caller) # "!"); + Log.add(logMap, #Menu, "New Menu with id " #Nat.toText(Map.size(menuMap)) # " Added By " #Principal.toText(caller) # "!"); return #ok("Menu Added Successfully"); }; public shared ({ caller }) func updateMenuItem(menuId : Nat, newMenuItem : Menu.NewMenuItem) : async Result.Result { - if (User.canPerform(employeeMap, caller, #ModifyMenuItem) != true) { + if (User.employeeCanPerform(employeeMap, caller, #ModifyMenuItem) != true) { return #err("The caller " #Principal.toText(caller) # " dose not have permission to update menu item!"); }; @@ -241,7 +231,7 @@ shared ({ caller = manager }) actor class Dorder() = this { }; public shared ({ caller }) func removeMenuItem(menuId : Nat) : async Result.Result { - if (User.canPerform(employeeMap, caller, #ModifyMenuItem) != true) { + if (User.employeeCanPerform(employeeMap, caller, #ModifyMenuItem) != true) { return #err("The caller " #Principal.toText(caller) # " dose not have permission to remove menu item!"); }; @@ -264,84 +254,73 @@ shared ({ caller = manager }) actor class Dorder() = this { //--------------------------- Review Functions ----------------------------\\ - public shared ({ caller }) func addPointToItem(menuId : Nat, star : Review.Star, suggest : Bool, comment : ?Text, image : ?[Blob]) : async Result.Result { - if (User.canPerform(employeeMap, caller, #ModifyMenuItemPoint) != true) { - return #err("The caller " #Principal.toText(caller) # " dose not have permission to Review an item!"); + public shared ({ caller }) func addOrUpdateItemScore(menuId : Nat, star : Review.Star, suggest : Bool, comment : ?Text, image : ?[Blob]) : async Result.Result { + if (User.userCanPerform(userMap, caller, #ModifyMenuItemPoint) != true) { + return #err("The caller " #Principal.toText(caller) # " dose not have permission to Review an item create a account first or login to your account!"); }; switch (Menu.get(menuMap, menuId)) { case null { - return #err("The menu item with id " #Nat.toText(menuId) # " does not exist!"); + return #err("The menu item " #Nat.toText(menuId) # " does not exist!"); }; case (?menuItem) { if (Menu.hasPoint(menuMap, menuId, caller) == true) { - return #err("The caller " #Principal.toText(caller) # " has already pointed this item!"); - }; - - let newMenuPoint = Buffer.fromArray(menuItem.star); - newMenuPoint.add({ - id = menuId; - comment = comment; - pointBy = caller; - star = star; - suggest = suggest; - cratedAt = Time.now(); - image = image; - }); + let newPoint : Review.MenuReview = { + id = menuId; + comment = comment; + pointBy = caller; + star = star; + suggest = suggest; + cratedAt = Time.now(); + image = image; + }; + let newItemScore = Menu.replaceNewItemScore(menuItem, menuId, caller, newPoint); + Map.set(menuMap, nhash, menuId, newItemScore); + Log.add(logMap, #MenuReview, "" #Principal.toText(caller) # " updated own Menu Review " #Nat.toText(menuId) # "!"); + return #ok("Update Success!"); + + } else { + + let newMenuPoint = Buffer.fromArray(menuItem.score); + newMenuPoint.add({ + id = menuId; + comment = comment; + pointBy = caller; + star = star; + suggest = suggest; + cratedAt = Time.now(); + image = image; + }); + + let newMenuItem : Menu.MenuItem = { + id = menuItem.id; + name = menuItem.name; + price = menuItem.price; + stock = menuItem.stock; + description = menuItem.description; + score = Buffer.toArray(newMenuPoint); + image = menuItem.image; + }; - let newMenuItem : Menu.MenuItem = { - id = menuItem.id; - name = menuItem.name; - price = menuItem.price; - stock = menuItem.stock; - description = menuItem.description; - star = Buffer.toArray(newMenuPoint); - image = menuItem.image; + Map.set(menuMap, nhash, menuId, newMenuItem); + Log.add(logMap, #MenuReview, "The User " #Principal.toText(caller) # " added a star to the menu item with id " #Nat.toText(menuId)); + return #ok("Review added to menu item " #Nat.toText(menuId) # "!"); }; - - Menu.put(menuMap, menuId, newMenuItem); - Log.add(logMap, #MenuReview, "The User " #Principal.toText(caller) # " added a star to the menu item with id " #Nat.toText(menuId)); - return #ok("Review added to menu item " #Nat.toText(menuId) # "!"); - }; - }; - }; - - public shared ({ caller }) func updateMenuPoint(menuId : Nat, comment : ?Text, star : Review.Star, suggest : Bool, image : ?[Blob]) : async Result.Result { - if (Menu.hasPoint(menuMap, menuId, caller) != true) { - return #err("this member doesnt star this menu"); - }; - let newPoint : Review.MenuReview = { - id = menuId; - comment = comment; - pointBy = caller; - star = star; - suggest = suggest; - cratedAt = Time.now(); - image = image; - }; - let filteredPoint = Menu.replaceMenuPointByPrincipal(menuMap, menuId, caller, newPoint); - switch (filteredPoint) { - case (false) { - return #err(" " #Principal.toText(caller) # " have not any Review in this Menu ID !"); - }; - case (true) { - Log.add(logMap, #MenuReview, "" #Principal.toText(caller) # " update their own Menu Review " #Nat.toText(menuId) # "!"); - - return #ok("Update Success!"); }; }; }; public shared ({ caller }) func addPointToEmployee(employeeId : Principal, star : Review.Star, comment : ?Text) : async Result.Result { - if (User.canPerform(employeeMap, caller, #ModifyEmployeePoints) != true) { - return #err("the caller " #Principal.toText(caller) # " dose not have permission Review to Emoloyee"); + if (User.userCanPerform(userMap, caller, #ModifyEmployeePoints) != true) { + return #err("the caller " #Principal.toText(caller) # " dose not have permission Review to Emoloyee, create an account first !"); }; if (User.hasPoint(employeeMap, caller, employeeId) == true) { + return #err("Member " #Principal.toText(caller) # " already have a Review this employee!"); }; - switch (User.get(employeeMap, employeeId)) { + switch (Map.get(employeeMap, phash, employeeId)) { case (null) { return #err("The employee with principal " #Principal.toText(employeeId) # " does not exist!"); }; @@ -355,7 +334,9 @@ shared ({ caller = manager }) actor class Dorder() = this { }); let updateEmployee : User.Employee = { name = employee.name; - principal = employeeId; + email = employee.email; + identity = employeeId; + number = employee.number; role = employee.role; allowedOperations = employee.allowedOperations; id = employee.id; @@ -363,7 +344,7 @@ shared ({ caller = manager }) actor class Dorder() = this { review = Buffer.toArray(employeeReview); }; - User.put(employeeMap, employeeId, updateEmployee); + Map.set(employeeMap, phash, employeeId, updateEmployee); Log.add(logMap, #EmployeeReview, "" #Principal.toText(caller) # " Gave Review to employee " #Principal.toText(employeeId) # "!"); return #ok("Review added to employee " #Principal.toText(employeeId) # " successfully!"); @@ -396,7 +377,7 @@ shared ({ caller = manager }) actor class Dorder() = this { }; public shared ({ caller }) func iterateToEployeeByAdmin(point : Review.Star) : async Result.Result<(), Text> { - if (User.canPerform(employeeMap, caller, #ModifyEmployeePoints) != true) { + if (User.employeeCanPerform(employeeMap, caller, #ModifyEmployeePoints) != true) { return #err("the caller " #Principal.toText(caller) # " dose not have permission Review to Emoloyee"); }; @@ -414,7 +395,9 @@ shared ({ caller = manager }) actor class Dorder() = this { let updateEmployee : User.Employee = { name = member.name; - principal = member.principal; + identity = member.identity; + email = member.email; + number = member.number; role = member.role; allowedOperations = member.allowedOperations; id = member.id; @@ -422,7 +405,7 @@ shared ({ caller = manager }) actor class Dorder() = this { review = Buffer.toArray(employeeReview); }; - User.put(employeeMap, member.principal, updateEmployee); + Map.set(employeeMap, phash, member.identity, updateEmployee); }; return #ok();