Чатиум — это low-code платформа для скоростной разработки.
На ней можно создать: веб-сервис, бота, мобильное приложение, лендинг и т.п.
За счет того, что код выполняется в облаке, вам не нужен внешний хостинг и отсутствует этап выкладки. Вы просто пишете код, сохраняете файл - и он сразу запускается.
Чатиум поддерживает как клиентский код (HTML/CSS/Javascript), так и серверный TypeScript.
Вы можете обращаться к внешним API, настраивать отложенный запуск кода, использовать внутреннюю базу данных и файловое хранилище для картинок, видео или статичных файлов, таких как архивы и pdf.
При запуске кода внутри аккаунта GetCourse вы можете использовать методы GetCourse-API, для получения и изменения данных в геткурсе.
Каждый аккаунт предоставляет файловую систему, в которой вы можете разместить свои файлы и папки.
Файлы сразу доступны и, либо отдаются пользователю "как есть" (это файлы с расширениями .html/.css/.js):
// file.html
<html>
<title>Этот файл отдастся "как есть"</title>
<body>
Такой способ можно использовать для верстки лендингов
</body>
</html>
Либо исполняются на сервере и выдают свой результат исполнения:
// serverfile.tsx
app.html('/', (ctx,req) => {
let record = await table.findOneBy(ctx, {})
return <html>
<h1>{record.title}</h1>
<div>{record.description}</div>
<p>
Такой способ можно использовать для динамических приложений
</p>
</html>
})
Чатиум дает очень простой способ создавать нативные мобильные приложения с помощью серверного кода.
Создание мобильных приложений построено по принципу Server Driven UI - сервер на каждый запрос пользователя отдает экран приложения вместе с версткой в специальном JSON-формате.
app.screen('/', () => {
return (
<screen title="Hello world!">
<text class="section">First screen</text>
</screen>
)
})
Вы пишете код на сервере, отдающий экран, а мобильное приложение отрисовывает интерфейс пользователя.
За счет того, что мобильные приложения разрабатываются в той-же среде и в том-же коде что и сайт - получается связанная архитектура, которую очень легко поддерживать и изменять.
Каждый запрос к серверу выполняется от какого-то пользователя, а внутри кода есть удобное API для получения актуальных данных пользователя.
За счет этого можно легко оградить некоторые экраны требованием авторизации, а некоторые - требованием конкретной роли пользователя.
import {requireRealUser, requireAccountRole} from '@app/auth'
app.screen('/', () => {
requireRealUser(ctx)
return (
<screen title="Личный кабинет">
<text class="section">
Этот экран запросит авторизацию
</text>
</screen>
)
})
app.screen('/admin', () => {
requireAccountRole(ctx, 'Admin')
return (
<screen title="Админка">
<text class="section">
Экран доступен только администраторам
</text>
</screen>
)
})
Чатиум поддерживает разные способы авторизации (по умолчанию работают такие способы как EMail и SMS), в каждом аккаунте можно выбрать "какими способами будет авторизовываться пользователь", а если способ отсутствует - можно дописать свой
Основная сила чатиума Чатиума - это модули. Когда вы разрабатываете веб-сервис или мобильное приложение, 80% задач это общие задачи уже существующих бизнесов - обработка заказов, оплаты, постановка задач, автоматизация бизнес-процессов, рассылки.
В чатиуме уже есть готовые модули, которые решают большинство задач, поэтому вы можете либо собрать свое решение из готовых модулей вообще не программируя, либо дописать то, чем уникален именно ваш сервис.
Любой код можно обернуть и сделать из него плагин, который можно будет подключать из других аккаунтов.
За счет этого, есть возможность переиспользовать решения других разработчиков и не делать собственные решения для CMS/CRM/Рассылок и т.п., но при этом обладать всей гибкостью кастомизации
Хуки - это куски кода которые вы можете вставить в уже готовые модули. К примеру, можно сделать редизайн модуля с помощью вставки своей верстки, либо-же добавить в карточку пользователя нужные вам блоки.
// Хук, показывающий страницу с несуществующим адресом
app.accountHook('404', (ctx,params) => {
return ctx.resp.html('<h2>Такого адреса не существует</h2>')
})
Большинство веб-сервисов требуют сохранения данных. В Чатиуме доступна база данных Heap, с помощью которой вы можете объявить таблицу прямо в коде и тут-же ее использовать - работая с записями в таблице как с типизированными объектами (используя всю мощь типизации Typescript):
import {Heap} from '@app/heap'
import {jsx} from '@app/html-jsx'
// Объявляем таблицу с двумя полями - name и age
const myTable = Heap.Table('students', {
name: Heap.String(),
age: Heap.Optional(Heap.Number()),
})
// Выводим ее записи на экран
app.get('/', async(ctx,req) => {
let records = myTable.findAll(ctx)
return <html>
<table>
{records.map( record => {
return <tr>
<td>{record.name}</td>
<td>{record.age}</td>
</tr>
})}
</table>
</html>
})
Самая частая задача, которую приходится решать когда делаешь свой веб-сервис - это хранение и обработке медиа-файлов (картинок, архивов и видео). Чатиум дает внутреннее API, которое позволяет не думать о технической стороной этой задачи. На физическом уровне поддерживается трехкратное резервирование файлов, CDN, преобразование размеров картинок и потоковая выдача видео.
Некоторый код не нужно запускать сразу, а нужно отложить задачу и выполнить ее через некоторое время. Также, бывает код который выполняется долго и должен выполниться в фоне.
import { scheduleJobAfter } from '@app/jobs'
import {showToast} from '@app/ui'
app.screen('/', async(ctx,req) => {
<screen>
<button onClick={setAction.apiCall({})}>
Напомнить через полчаса
</button>
</screen>
})
const setAction = app.apiCall('set-alarm', () => {
await scheduleJobAfter(ctx, 30, 'min', alarmJob.path(), {})
return showToast('Задача поставлена')
})
const alarmJob = app.job('run-alarm', () => {
// здесь код, который вызовется в нужное время
})
Реализация первого проекта займет не более 30 минут. Давайте начнем