Merge branch 'main' of https://gitlab.com/robossembler/webservice into 14-fix/sticky-objects
This commit is contained in:
commit
c43c192a3e
9 changed files with 25177 additions and 8 deletions
16
README.md
16
README.md
|
@ -3,6 +3,7 @@
|
|||
Необходимость разработки сервиса хранения и просмотра пакетов обусловлена тем, что для корректной работы фреймворка «Робосборщик» необходима согласованная работа разнообразных программный модулей – результаты работы одних модулей должны передаваться через стандартизированные интерфейсы другим модулям. Как правило, результатами работы программных модулей являются исполняемые файлы программ, файлы 3D-моделей в форматах STL, FBX, Collada/DAE, OBJ, PLY и т.п., конфигурационные файлы в форматах yaml, json, ini, txt, веса нейронных сетей, описания роботов/сцен в форматах URDF, SDF, MJCF и т.д.. При этом необходимо соблюсти условие соответствия данных файлов/документов друг другу, иметь возможность формировать и отслеживать цепочки вычислений (конвейер, pipeline), которые их порождают.
|
||||
|
||||
Данный веб-сервис выполняет следующие функции:
|
||||
|
||||
- Создание процессов (process) – команд, запускающих определённые вычисления
|
||||
- Создание триггеров (trigger) – событий, запускающихся по завершении процесса
|
||||
- Создание конвейеров вычислений (pipeline) – цепочек из процессов
|
||||
|
@ -11,3 +12,18 @@
|
|||
- Запуск процессов/конвейеров и отслеживание их состояния
|
||||
|
||||
Веб-сервис написан на языке TypeScript для среды исполнения NodeJS. Для хранения артефактов используется база данных MongoDB. Исходный код проекта разработан в соответствии с концепцией «Чистой архитектуры», описанной Робертом Мартином в одноимённой книге. Данный подход позволяет систематизировать код, отделить бизнес-логику от остальной части приложения.
|
||||
|
||||
# Установка
|
||||
|
||||
## Требования
|
||||
|
||||
- Node.js
|
||||
- MongoDB
|
||||
|
||||
## Сборка UI
|
||||
|
||||
- `cd ui && npm i && npm run build && npm run deploy`
|
||||
|
||||
# Запуск сервиса
|
||||
|
||||
- `cd server && npm run dev`
|
||||
|
|
1
server/.gitignore
vendored
1
server/.gitignore
vendored
|
@ -4,7 +4,6 @@
|
|||
.DS_Store
|
||||
node_modules/
|
||||
coverage
|
||||
package-lock.json
|
||||
.*.swp
|
||||
build/
|
||||
model_create.ts
|
||||
|
|
6829
server/package-lock.json
generated
Normal file
6829
server/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
1
ui/.gitignore
vendored
1
ui/.gitignore
vendored
|
@ -21,5 +21,4 @@
|
|||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
package-lock.json
|
||||
todo.md
|
18261
ui/package-lock.json
generated
Normal file
18261
ui/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
|
@ -34,6 +34,7 @@
|
|||
"rete-react-plugin": "^2.0.4",
|
||||
"rete-render-utils": "^2.0.1",
|
||||
"sass": "^1.66.1",
|
||||
"serve": "^14.2.1",
|
||||
"socket.io-client": "^4.7.2",
|
||||
"styled-components": "^6.1.8",
|
||||
"three": "^0.159.0",
|
||||
|
@ -49,7 +50,8 @@
|
|||
"dev": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject"
|
||||
"eject": "react-scripts eject",
|
||||
"deploy": "serve -s build"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": [
|
||||
|
|
|
@ -17,7 +17,6 @@ export class HttpError extends Error {
|
|||
|
||||
export class HttpRepository {
|
||||
private server = "http://localhost:4001";
|
||||
|
||||
public async _formDataRequest<T>(method: HttpMethod, url: string, data?: any): Promise<Result<HttpError, T>> {
|
||||
let formData = new FormData();
|
||||
formData.append("file", data);
|
||||
|
@ -33,7 +32,6 @@ export class HttpRepository {
|
|||
}
|
||||
return Result.ok(response.text as T);
|
||||
}
|
||||
|
||||
public async _jsonRequest<T>(method: HttpMethod, url: string, data?: any): Promise<Result<HttpError, T>> {
|
||||
try {
|
||||
const reqInit = {
|
||||
|
@ -71,7 +69,6 @@ export class HttpRepository {
|
|||
}
|
||||
return Result.ok(response.text as T);
|
||||
}
|
||||
|
||||
public async _jsonToClassInstanceRequest<T>(
|
||||
method: HttpMethod,
|
||||
url: string,
|
||||
|
|
68
ui/src/features/p.tsx
Normal file
68
ui/src/features/p.tsx
Normal file
|
@ -0,0 +1,68 @@
|
|||
export {};
|
||||
// import React from "react";
|
||||
// import { CoreError, UiErrorState } from "../core/store/base_store";
|
||||
// import { SelectProjectStore } from "./select_project/presentation/select_project_store";
|
||||
|
||||
// export declare type ClassConstructor<T> = {
|
||||
// new (...args: any[]): T;
|
||||
// };
|
||||
// interface MobxReactComponentProps<T extends UiErrorState<CoreError>, ClassConstructor> {
|
||||
// store: ClassConstructor;
|
||||
// children: (element: T) => React.ReactElement;
|
||||
// }
|
||||
|
||||
// class UiStateErrorComponent<T extends UiErrorState<CoreError>, K> extends React.Component<
|
||||
// MobxReactComponentProps<T, K>,
|
||||
// { store: T | undefined }
|
||||
// > {
|
||||
// async componentDidMount(): Promise<void> {
|
||||
// const store = this.props.store as ClassConstructor<T>;
|
||||
// console.log(store);
|
||||
// const s = new store();
|
||||
// this.setState({ store: s });
|
||||
// if (this.state !== null) {
|
||||
// await this.state.store?.init();
|
||||
// }
|
||||
// }
|
||||
// componentWillUnmount(): void {
|
||||
// if (this.state.store !== undefined) {
|
||||
// this.state.store.dispose();
|
||||
// }
|
||||
// }
|
||||
|
||||
// render() {
|
||||
// if (this.state !== null) {
|
||||
// if (this.state.store?.isLoading) {
|
||||
// return <>Loading</>;
|
||||
// }
|
||||
// if (this.state.store !== undefined) {
|
||||
// return this.props.children(this.state.store);
|
||||
// }
|
||||
// }
|
||||
|
||||
// return (
|
||||
// <div>
|
||||
// <>{this.props.children}</>
|
||||
// </div>
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
||||
// export const ExampleScreen: React.FC = () => {
|
||||
// return (
|
||||
// <div>
|
||||
// <UiStateErrorComponent<SelectProjectStore, {}> store={SelectProjectStore}>
|
||||
// {(store) => {
|
||||
// console.log(store);
|
||||
// return (
|
||||
// <div>
|
||||
// {store.projects.map((el) => {
|
||||
// return <>{el}</>;
|
||||
// })}
|
||||
// </div>
|
||||
// );
|
||||
// }}
|
||||
// </UiStateErrorComponent>
|
||||
// </div>
|
||||
// );
|
||||
// };
|
|
@ -15,7 +15,6 @@ export function StaticAssetModelView(props: IStaticAssetModelViewProps) {
|
|||
backgroundColor: "ActiveBorder",
|
||||
padding: "10px",
|
||||
color: "white",
|
||||
|
||||
textAlignLast: "center",
|
||||
}}
|
||||
>
|
||||
|
@ -32,7 +31,6 @@ export function StaticAssetModelView(props: IStaticAssetModelViewProps) {
|
|||
backgroundColor: "brown",
|
||||
padding: "10px",
|
||||
color: "white",
|
||||
|
||||
textAlignLast: "center",
|
||||
}}
|
||||
>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue