feat: Integrate supabase (#2551)

* feat: integrate supabase auth service

* chore: ignore the sercet

* feat: separate and inject the auth service

* chore: integrate auth service into sign in/up page

* feat: integrate github and google sign in

* chore: update user trait

* feat: box any params in UserCloudService trait

* feat: add flowy-server crate

* refactor: user trait

* docs: doc ThirdPartyAuthPB

* feat: server provider

* feat: pass the uuid to rust side

* feat: pass supabase config to rust side

* feat: integrate env file

* feat: implement login as guest

* feat: impl postgrest

* test: use env

* chore: upper case key

* feat: optimize the file storage

* fix: don't call set auth when user login in local

* docs: add docs

* feat: create/update/get user using postgrest

* feat: optimize the login as guest

* feat: create user workspace

* feat: create user default workspace

* feat: redesign the setting path location page

* feat: use uuid as view id

* feat: send auth info to rust backend

* fix: sign up

* fix: skip to wrong page after login

* fix: integrate test error

* fix: indent command error

* feat: add discord login in type

* fix: flutter analyze

* ci: fix rust tests

* ci: fix tauri build

* ci: fix tauri build

---------

Co-authored-by: nathan <nathan@appflowy.io>
This commit is contained in:
Lucas.Xu
2023-05-21 18:53:59 +08:00
committed by GitHub
parent 5cc8340e05
commit d842f228e8
131 changed files with 3023 additions and 1173 deletions

View File

@ -1,3 +1,12 @@
use std::convert::TryInto;
use std::sync::Arc;
use bytes::Bytes;
use collab_database::fields::Field;
use flowy_derive::ProtoBuf;
use flowy_error::ErrorCode;
use crate::entities::parser::NotEmptyStr;
use crate::entities::{
CheckboxFilterPB, ChecklistFilterPB, DateFilterContentPB, DateFilterPB, FieldType,
@ -5,12 +14,6 @@ use crate::entities::{
};
use crate::services::field::SelectOptionIds;
use crate::services::filter::{Filter, FilterType};
use bytes::Bytes;
use collab_database::fields::Field;
use flowy_derive::ProtoBuf;
use flowy_error::ErrorCode;
use std::convert::TryInto;
use std::sync::Arc;
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
pub struct FilterPB {
@ -95,7 +98,7 @@ impl TryInto<DeleteFilterParams> for DeleteFilterPayloadPB {
.0;
let filter_id = NotEmptyStr::parse(self.filter_id)
.map_err(|_| ErrorCode::UnexpectedEmptyString)?
.map_err(|_| ErrorCode::UnexpectedEmpty)?
.0;
let filter_type = FilterType {

View File

@ -178,7 +178,7 @@ impl TryInto<DeleteSortParams> for DeleteSortPayloadPB {
.0;
let sort_id = NotEmptyStr::parse(self.sort_id)
.map_err(|_| ErrorCode::UnexpectedEmptyString)?
.map_err(|_| ErrorCode::UnexpectedEmpty)?
.0;
let sort_type = SortType {

View File

@ -19,7 +19,7 @@ use crate::services::database::{DatabaseEditor, MutexDatabase};
pub trait DatabaseUser2: Send + Sync {
fn user_id(&self) -> Result<i64, FlowyError>;
fn token(&self) -> Result<String, FlowyError>;
fn token(&self) -> Result<Option<String>, FlowyError>;
fn collab_db(&self) -> Result<Arc<RocksCollabDB>, FlowyError>;
}
@ -46,7 +46,7 @@ impl DatabaseManager2 {
}
}
pub async fn initialize(&self, user_id: i64, _token: &str) -> FlowyResult<()> {
pub async fn initialize(&self, user_id: i64) -> FlowyResult<()> {
let db = self.user.collab_db()?;
*self.user_database.lock() = Some(InnerUserDatabase::new(
user_id,
@ -58,8 +58,8 @@ impl DatabaseManager2 {
Ok(())
}
pub async fn initialize_with_new_user(&self, user_id: i64, token: &str) -> FlowyResult<()> {
self.initialize(user_id, token).await?;
pub async fn initialize_with_new_user(&self, user_id: i64, _token: &str) -> FlowyResult<()> {
self.initialize(user_id).await?;
Ok(())
}

View File

@ -1,4 +1,3 @@
use std::any::Any;
use std::cmp::Ordering;
use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher};
@ -7,6 +6,7 @@ use collab_database::fields::{Field, TypeOptionData};
use collab_database::rows::{Cell, RowId};
use flowy_error::FlowyResult;
use lib_infra::box_any::BoxAny;
use crate::entities::FieldType;
use crate::services::cell::{
@ -486,41 +486,7 @@ fn get_type_option_transform_handler(
}
}
pub struct BoxCellData(Box<dyn Any + Send + Sync + 'static>);
impl BoxCellData {
fn new<T>(value: T) -> Self
where
T: Send + Sync + 'static,
{
Self(Box::new(value))
}
fn unbox_or_default<T>(self) -> T
where
T: Default + 'static,
{
match self.0.downcast::<T>() {
Ok(value) => *value,
Err(_) => T::default(),
}
}
pub(crate) fn unbox_or_none<T>(self) -> Option<T>
where
T: Default + 'static,
{
match self.0.downcast::<T>() {
Ok(value) => Some(*value),
Err(_) => None,
}
}
#[allow(dead_code)]
fn downcast_ref<T: 'static>(&self) -> Option<&T> {
self.0.downcast_ref()
}
}
pub type BoxCellData = BoxAny;
pub struct RowSingleCellData {
pub row_id: RowId,