diff --git a/.gitignore b/.gitignore index 469867c..a5c5db1 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,5 @@ **/*.iml **/.idea + +.DS_Store diff --git a/backend-assemblyscript/step1-json-api/assembly/main.ts b/backend-assemblyscript/step1-json-api/assembly/main.ts index 086e706..3ba07e4 100644 --- a/backend-assemblyscript/step1-json-api/assembly/main.ts +++ b/backend-assemblyscript/step1-json-api/assembly/main.ts @@ -1,9 +1,8 @@ -import {Action, decode, PostRequest} from "./request"; -import {PostResponse, FetchResponse, UnknownResponse} from "./response"; +import {Action, decode, FetchRequest, PostRequest} from "./request"; +import {PostResponse, UnknownResponse} from "./response"; +import {addMessage, createScheme, getMessages, getPostsCount} from "./model"; -let messages = new Array(); -messages.push("hello"); -messages.push("hi!"); +createScheme(); // main handler for an application export function handler(input: string): string { @@ -12,11 +11,16 @@ export function handler(input: string): string { if (request.action == Action.Post) { let post = request as PostRequest; - let response = new PostResponse(0); + addMessage(post.msg, post.username); + let count = getPostsCount(); + + let response = new PostResponse(count); return response.serialize() } else if (request.action == Action.Fetch) { - let response = new FetchResponse(messages); - return response.serialize() + let fetch = request as FetchRequest; + + let result = getMessages(fetch.username); + return result; } let response = new UnknownResponse(); diff --git a/backend-assemblyscript/step1-json-api/assembly/model.ts b/backend-assemblyscript/step1-json-api/assembly/model.ts new file mode 100644 index 0000000..2066139 --- /dev/null +++ b/backend-assemblyscript/step1-json-api/assembly/model.ts @@ -0,0 +1,16 @@ +import {log} from "../node_modules/assemblyscript-sdk/assembly/logger"; + +export function createScheme(): void { + log("create scheme"); +} +export function addMessage(msg: string, username: string): void { + log("add message"); +} +export function getMessages(username: string | null): string { + log("get messages"); + return "[]"; +} +export function getPostsCount(): u32 { + log("get posts count"); + return 0; +} diff --git a/backend-assemblyscript/step1-json-api/assembly/request.ts b/backend-assemblyscript/step1-json-api/assembly/request.ts index 1654aa9..48afe4f 100644 --- a/backend-assemblyscript/step1-json-api/assembly/request.ts +++ b/backend-assemblyscript/step1-json-api/assembly/request.ts @@ -4,6 +4,7 @@ export enum Action { Post, Fetch, Unknown + // Error } export abstract class Request { @@ -24,9 +25,12 @@ export class PostRequest extends Request { } export class FetchRequest extends Request { - constructor() { + public readonly username: string | null; + + constructor(username: string | null) { super(); this.action = Action.Fetch; + this.username = username; } } @@ -37,7 +41,7 @@ export class UnknownRequest extends Request { } } -function string2Bytes(str: string): Uint8Array { +export function string2Bytes(str: string): Uint8Array { return Uint8Array.wrap(String.UTF8.encode(str)); } @@ -54,7 +58,7 @@ export function decode(input: string): Request { let request: Request; if (action == "Fetch") { - request = new FetchRequest(); + request = new FetchRequest(jsonHandler.filter_handle); } else if (action == "Post") { request = new PostRequest(jsonHandler.msg, jsonHandler.username) } else { @@ -69,6 +73,7 @@ class RequestJSONEventsHandler extends JSONHandler { public action: string; public msg: string; public username: string; + public filter_handle: string | null; setString(name: string, value: string): void { @@ -78,6 +83,7 @@ class RequestJSONEventsHandler extends JSONHandler { this.msg = value; } else if (name == "username") { this.username = value; + this.filter_handle = value; } // json scheme is not strict, so we won't throw an error on excess fields } diff --git a/backend-assemblyscript/step1-json-api/assembly/response.ts b/backend-assemblyscript/step1-json-api/assembly/response.ts index a1905c9..7faf77f 100644 --- a/backend-assemblyscript/step1-json-api/assembly/response.ts +++ b/backend-assemblyscript/step1-json-api/assembly/response.ts @@ -7,6 +7,16 @@ export abstract class Response { }; } +export class Message { + msg: string; + username: string; + + constructor(msg: string, username: string) { + this.msg = msg; + this.username = username; + } +} + export class UnknownResponse extends Response { constructor() { super(); @@ -24,8 +34,8 @@ export class UnknownResponse extends Response { } export class PostResponse extends Response { - msgCount: i32; - constructor(msgCount: i32) { + msgCount: u32; + constructor(msgCount: u32) { super(); this.msgCount = msgCount; } @@ -42,9 +52,9 @@ export class PostResponse extends Response { } export class FetchResponse extends Response { - posts: Array; + posts: Array; - constructor(posts: Array) { + constructor(posts: Array) { super(); this.posts = posts; } @@ -55,9 +65,10 @@ export class FetchResponse extends Response { encoder.setString("action", "Fetch"); encoder.pushArray("posts"); for (let i = 0; i < this.posts.length; i++) { - let message = this.posts[i]; + let twit = this.posts[i]; encoder.pushObject(null); - encoder.setString("msg", message); + encoder.setString("msg", twit.msg); + encoder.setString("username", twit.username); encoder.popObject(); } encoder.popArray(); diff --git a/backend-assemblyscript/step3-finished-app/assembly/database.ts b/backend-assemblyscript/step3-finished-app/assembly/database.ts deleted file mode 100644 index cfcd5a4..0000000 --- a/backend-assemblyscript/step3-finished-app/assembly/database.ts +++ /dev/null @@ -1,40 +0,0 @@ -import {log} from "../node_modules/assemblyscript-sdk/assembly/logger"; -import {query} from "../node_modules/db-connector/assembly/sqlite" - -function doRequest(request: string): string { - - log("[doRequest] Request: " + request); - - let result = query(request); - - log("[doRequest] Result: "); - log("[doRequest] " + result); - - return result; -} - -export function initTables(): void { - let request = "CREATE TABLE messages(msg text, username text)"; - let resp = doRequest(request); -} - -export function addMessage(msg: string, username: string): void { - let request = "INSERT INTO messages VALUES(\"" + msg + "\", \"" + username + "\")"; - doRequest(request); -} - -export function getMessages(username: string | null): string { - if (username) { - let request = "SELECT json_group_array(json_object('msg', msg, 'username', username)) AS json_result FROM (SELECT * FROM messages WHERE username = '" + username + "')"; - return doRequest(request); - } else { - let request = "SELECT json_group_array(json_object('msg', msg, 'username', username)) AS json_result FROM (SELECT * FROM messages)"; - return doRequest(request); - } -} - -export function getPostsCount(): u32 { - let request = "SELECT COUNT(*) from messages"; - let result = doRequest(request); - return U32.parseInt(result); -} diff --git a/backend-assemblyscript/step3-finished-app/assembly/main.ts b/backend-assemblyscript/step3-finished-app/assembly/main.ts index dc1b714..3ba07e4 100644 --- a/backend-assemblyscript/step3-finished-app/assembly/main.ts +++ b/backend-assemblyscript/step3-finished-app/assembly/main.ts @@ -1,8 +1,8 @@ import {Action, decode, FetchRequest, PostRequest} from "./request"; -import {PostResponse, Message, FetchResponse, UnknownResponse} from "./response"; -import {addMessage, getMessages, getPostsCount, initTables} from "./database"; +import {PostResponse, UnknownResponse} from "./response"; +import {addMessage, createScheme, getMessages, getPostsCount} from "./model"; -initTables(); +createScheme(); // main handler for an application export function handler(input: string): string { diff --git a/backend-assemblyscript/step3-finished-app/assembly/model.ts b/backend-assemblyscript/step3-finished-app/assembly/model.ts new file mode 100644 index 0000000..001475d --- /dev/null +++ b/backend-assemblyscript/step3-finished-app/assembly/model.ts @@ -0,0 +1,35 @@ +import {query} from "../node_modules/db-connector/assembly/sqlite" + +export function createScheme(): void { + let request = `CREATE TABLE messages(msg text, username text)`; + query(request); +} + +export function addMessage(msg: string, username: string): void { + let request = `INSERT INTO messages VALUES("` + msg + `", "` + username + `")`; + query(request); +} + +export function getMessages(username: string | null): string { + if (username) { + + let request = + `SELECT json_group_array( + json_object('msg', msg, 'username', username) + ) AS json_result FROM + (SELECT * FROM messages WHERE username = "` + username + `")`; + return query(request); + } else { + let request = + `SELECT json_group_array( + json_object('msg', msg, 'username', username) + ) AS json_result FROM (SELECT * FROM messages)`; + return query(request); + } +} + +export function getPostsCount(): u32 { + let request = `SELECT COUNT(*) from messages`; + let result = query(request); + return U32.parseInt(result); +}