feat: todo

This commit is contained in:
Ahmet Kaan GÜMÜŞ 2024-02-17 12:15:25 +03:00
parent 7b6833703a
commit c738d9447c
3 changed files with 114 additions and 0 deletions

25
.gitignore vendored Normal file
View file

@ -0,0 +1,25 @@
# Various IDEs and Editors
.vscode/
.idea/
**/*~
# Mac OSX temporary files
.DS_Store
**/.DS_Store
# dfx temporary files
.dfx/
# generated files
**/declarations/
# rust
target/
# frontend code
node_modules/
dist/
.svelte-kit/
# environment variables
.env

16
dfx.json Normal file
View file

@ -0,0 +1,16 @@
{
"canisters": {
"motoko_backend": {
"main": "src/motoko_backend/main.mo",
"type": "motoko"
}
},
"defaults": {
"build": {
"args": "",
"packtool": ""
}
},
"output_env_file": ".env",
"version": 1
}

View file

@ -0,0 +1,73 @@
import Text "mo:base/Text";
import Bool "mo:base/Bool";
import Hash "mo:base/Hash";
import Nat "mo:base/Nat";
import Map "mo:base/HashMap";
import Iter "mo:base/Iter";
actor Assistant
{
public query func greet(name : Text) : async Text
{
return "Hello, " # name # "!";
};
type ToDo =
{
description: Text;
completed: Bool;
};
func naturalHash(n: Nat) : Hash.Hash
{
Text.hash(Nat.toText(n))
};
var todos = Map.HashMap<Nat, ToDo>(0, Nat.equal, naturalHash);
var nextID: Nat = 0;
public query func getTodos() : async [ToDo]
{
Iter.toArray(todos.vals());
};
public query func addTodo(description: Text) : async Nat
{
let id = nextID;
todos.put(id, {description = description; completed = false});
nextID += 1;
id
};
public func completeToDo(id: Nat): async ()
{
ignore do ?
{
let description = todos.get(id)!.description;
todos.put(id, {description; completed = true});
};
};
public query func showTodos() : async Text
{
var output : Text = "\nTO-DO\n";
for (todo: ToDo in todos.vals())
{
output #= "\n" # todo.description;
if (todo.completed)
{
output #= "+";
};
};
output # "\n"
};
public func clearCompleted() : async ()
{
todos := Map.mapFilter<Nat, ToDo, ToDo>(todos, Nat.equal, naturalHash,
func(_, todo)
{
if (todo.completed) null else ?todo
});
};
};