Чатиум - это облачная платформа для создания бизнес-приложений. На ней вы можете либо собрать свое решение из готовых модулей, либо дописать то, чего не хватает именно вам.
Основные модули описаны на главной странице, а в этой документации мы рассказываем о том, как создавать свой собственный функционал.
Приложения в Чатиуме пишутся на языке TypeScript, с помощью редактора VSCode или web-ide.
Сначала стоит создать аккаунт и освоиться в среде разработки (5 минут) После этого, мы подготовили вводные инструкции для быстрого старта:
Проще всего разбираться на примерах, поэтому мы подготовили раздел с готовыми примерами кода, которые можно открыть в песочнице и скопировать одним кликом.
Также стоит воспользоваться поиском по документации или умным ботом в правом нижнем углу страницы (или в телеграме)
Аккаунт чатиума - это место в котором хранятся код и данные вашего проекта. Каждый аккаунт это по сути сайт, со своим доменом. Данные аккаунтов не пересекаются между собой
Модули подключаются в аккаунт. Сотрудники и пользователи - это также данные аккаунта, каждый пользователь имеет одну из 5 ролей
Вам не нужно думать о том, как запускать проект, где хранить код, таблицы, картинки и видео. Чатиум делает это за вас.
Каждый аккаунт предоставляет файловую систему, в которой вы можете разместить свои файлы и папки.
Файлы сразу доступны и, либо отдаются пользователю "как есть" (это файлы с расширениями .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>
})
Основная сила Чатиума - это модульная архитектура. Когда вы разрабатываете веб-сервис или мобильное приложение, 80% задач это общие задачи, такие как: обработка заказов, оплаты, постановка задач, автоматизация бизнес-процессов, рассылки, которые доступны с помощью встроенных модулей
Любой разработчик в чатиуме может создать собственный плагин и опубликовать его в общем каталоге для продажи другим людям. Другие компании могут подключать его в свои аккаунты, заплатив указанную разработчиком сумму (разово или по подписке).
Чатиум дает очень простой способ создавать нативные мобильные приложения с помощью серверного кода.
Создание мобильных приложений построено по принципу 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), в каждом аккаунте можно выбрать "какими способами будет авторизовываться пользователь", а если способ отсутствует - можно дописать свой
Хуки - это куски кода которые вы можете вставить в уже готовые модули. К примеру, можно сделать редизайн модуля с помощью вставки своей верстки, либо-же добавить в карточку пользователя нужные вам блоки.
// Хук, показывающий страницу с несуществующим адресом
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 минут. Давайте начнем