refactoring

This commit is contained in:
folex
2019-08-16 12:27:30 +03:00
parent 50747bbcd3
commit b85eea0963
8 changed files with 94 additions and 60 deletions

2
.gitignore vendored
View File

@ -12,3 +12,5 @@
**/*.iml **/*.iml
**/.idea **/.idea
.DS_Store

View File

@ -1,9 +1,8 @@
import {Action, decode, PostRequest} from "./request"; import {Action, decode, FetchRequest, PostRequest} from "./request";
import {PostResponse, FetchResponse, UnknownResponse} from "./response"; import {PostResponse, UnknownResponse} from "./response";
import {addMessage, createScheme, getMessages, getPostsCount} from "./model";
let messages = new Array<string>(); createScheme();
messages.push("hello");
messages.push("hi!");
// main handler for an application // main handler for an application
export function handler(input: string): string { export function handler(input: string): string {
@ -12,11 +11,16 @@ export function handler(input: string): string {
if (request.action == Action.Post) { if (request.action == Action.Post) {
let post = request as PostRequest; 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() return response.serialize()
} else if (request.action == Action.Fetch) { } else if (request.action == Action.Fetch) {
let response = new FetchResponse(messages); let fetch = request as FetchRequest;
return response.serialize()
let result = getMessages(fetch.username);
return result;
} }
let response = new UnknownResponse(); let response = new UnknownResponse();

View File

@ -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;
}

View File

@ -4,6 +4,7 @@ export enum Action {
Post, Post,
Fetch, Fetch,
Unknown Unknown
// Error
} }
export abstract class Request { export abstract class Request {
@ -24,9 +25,12 @@ export class PostRequest extends Request {
} }
export class FetchRequest extends Request { export class FetchRequest extends Request {
constructor() { public readonly username: string | null;
constructor(username: string | null) {
super(); super();
this.action = Action.Fetch; 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)); return Uint8Array.wrap(String.UTF8.encode(str));
} }
@ -54,7 +58,7 @@ export function decode(input: string): Request {
let request: Request; let request: Request;
if (action == "Fetch") { if (action == "Fetch") {
request = new FetchRequest(); request = new FetchRequest(jsonHandler.filter_handle);
} else if (action == "Post") { } else if (action == "Post") {
request = new PostRequest(jsonHandler.msg, jsonHandler.username) request = new PostRequest(jsonHandler.msg, jsonHandler.username)
} else { } else {
@ -69,6 +73,7 @@ class RequestJSONEventsHandler extends JSONHandler {
public action: string; public action: string;
public msg: string; public msg: string;
public username: string; public username: string;
public filter_handle: string | null;
setString(name: string, value: string): void { setString(name: string, value: string): void {
@ -78,6 +83,7 @@ class RequestJSONEventsHandler extends JSONHandler {
this.msg = value; this.msg = value;
} else if (name == "username") { } else if (name == "username") {
this.username = value; this.username = value;
this.filter_handle = value;
} }
// json scheme is not strict, so we won't throw an error on excess fields // json scheme is not strict, so we won't throw an error on excess fields
} }

View File

@ -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 { export class UnknownResponse extends Response {
constructor() { constructor() {
super(); super();
@ -24,8 +34,8 @@ export class UnknownResponse extends Response {
} }
export class PostResponse extends Response { export class PostResponse extends Response {
msgCount: i32; msgCount: u32;
constructor(msgCount: i32) { constructor(msgCount: u32) {
super(); super();
this.msgCount = msgCount; this.msgCount = msgCount;
} }
@ -42,9 +52,9 @@ export class PostResponse extends Response {
} }
export class FetchResponse extends Response { export class FetchResponse extends Response {
posts: Array<string>; posts: Array<Message>;
constructor(posts: Array<string>) { constructor(posts: Array<Message>) {
super(); super();
this.posts = posts; this.posts = posts;
} }
@ -55,9 +65,10 @@ export class FetchResponse extends Response {
encoder.setString("action", "Fetch"); encoder.setString("action", "Fetch");
encoder.pushArray("posts"); encoder.pushArray("posts");
for (let i = 0; i < this.posts.length; i++) { for (let i = 0; i < this.posts.length; i++) {
let message = this.posts[i]; let twit = this.posts[i];
encoder.pushObject(null); encoder.pushObject(null);
encoder.setString("msg", message); encoder.setString("msg", twit.msg);
encoder.setString("username", twit.username);
encoder.popObject(); encoder.popObject();
} }
encoder.popArray(); encoder.popArray();

View File

@ -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);
}

View File

@ -1,8 +1,8 @@
import {Action, decode, FetchRequest, PostRequest} from "./request"; import {Action, decode, FetchRequest, PostRequest} from "./request";
import {PostResponse, Message, FetchResponse, UnknownResponse} from "./response"; import {PostResponse, UnknownResponse} from "./response";
import {addMessage, getMessages, getPostsCount, initTables} from "./database"; import {addMessage, createScheme, getMessages, getPostsCount} from "./model";
initTables(); createScheme();
// main handler for an application // main handler for an application
export function handler(input: string): string { export function handler(input: string): string {

View File

@ -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);
}