Я работаю над многопользовательской реакцией нативной игры для Android, это просто текстовая игра.На данный момент я работаю только на стороне клиента, но постепенно приближаюсь к тому моменту, когда мне нужно выбрать способ управления данными.Так как я всегда пытаюсь узнать что-то новое - впервые используя RN - я наткнулся на Firestore, и мне любопытно, является ли это жизнеспособным выбором из моего проекта.
Например, в этой игре вы можетекупить / открыть компании.Если бы я обрабатывал это действие в nodejs + MongoDB, я бы отправил токен JWT на server/api/newcompany
.
. Предполагая, что у меня будет 2 модели MongoDB, Users
со всей информацией пользователя и Company
список всех компаний в игре.Сначала я проверял, достаточно ли у Пользователя денег, чтобы открыть компанию, а затем возвращал какое-то сообщение, основанное на этом, мой код был бы примерно таким:
// routes.js
...
router.post('/api/newcompany',AuthCheck, Company.new)
// controllers/company.js
...
new: async function (req, res, next) {
if (!req.body.companyType || !validCompanyType) {
return res.status(200).send('invalid/missing message and other failed checks')
}
//assuming token data would be passed from auth middleware and would have company prices somewhere
const user = await Users.find({id:token.userId})
if (user.money < companyPrice) {
res.status(200).send('no money')
} else {
const newCompany = new Company()
newCompany.name = req.body.name
...
new.Companny.save(function(){
res.status(200).send('all good')
})
}
}
Глядя на Firestore, у меня было бы то же самое2 документа, как указано выше.Users
со списком поддокументов (пользователей), идентифицированных по их идентификаторам, и документом Companies
.
Смогу ли я выполнить те же проверки пользователей, что и выше?Как бы я справился с этим?Буду ли я использовать правила Firestore для проверки того, что у пользователя достаточно денег, или я буду использовать свой сервер с SDK администратора в качестве посредника для обработки более сложных операций и использовать прямое соединение Firestore только для получения данных?
Спасибо за ваше время.