최고의 풀 스택 경험.
이 프로젝트는 초기 미리 보기 에 있습니다.
이 프로젝트는 CLI로 사용될 수 있습니다.
cargo install ultime
이 프로젝트는 다음 기술 스택을 사용하여 더 빠르고 더 나은 개발 워크 플로를 제공하는 기능이 포함되어 있습니다.
주요 기능은 SurrealDB 스키마 및 쿼리를 기반으로 한 코드 생성의 자동입니다. Ultime 프로젝트는 다음과 같습니다.
/schemas · Schemas 폴더 arprealDB-migrations의 폴더/events · arprealDB 마이그레이션의 이벤트 폴더/migrations · atrealdb-migrations의 마이그레이션 폴더/queries · 프로젝트의 특정 쿼리를 포함하는 .surql 파일 목록 (페치 데이터 만)/mutations · 프로젝트의 특정 돌연변이를 포함하는 .surql 파일 목록 (변경 데이터)/src/api · API 엔드 포인트 목록/components · 어디서나 사용할 수있는 구성 요소 목록/db/crud · 기본 CRUD 작업의 기능, /schemas 파일에서 생성/events · /events 파일에서 생성 된 SurrealDB 이벤트를 실행하는 기능/mutations · /mutations 파일에서 생성 된 DB 업데이트 기능/queries · 쿼리 DB에 대한 함수, /queries 파일에서 생성/models · 앱에 사용 된 문자열 목록queries.rs · 파일 /queries 에서 각 쿼리의 응답 유형 (이 파일은 현재 자동 생성되지 않음)mutations.rs · /mutations 파일의 각 돌연변이의 반응 유형 (이 파일은 현재 자동으로 생성되지 않음)/pages · 경로로 사용할 수있는 고차 구성 요소 목록 먼저 사전 정의 된 템플릿 중 하나를 사용하여 새 프로젝트를 만들어야합니다. 예를 들면 다음과 같습니다.
ultime new my-blog --template blog
새 디렉토리가 생성됩니다. 이 새 디렉토리에 cd 하고 다음 명령을 실행할 수 있습니다.
ultime
이 명령은 다음과 같습니다.
/schemas , /events , /queries 및 /mutations 폴더에서 db 모듈 생성 현재로서는 .surql 파일의 출력을 자동으로 감지 할 수 없습니다 : queries 또는 mutations . 그러나 유형이 자동으로 생성되므로 필요한 모든 것은이 유형의 속성을 정의하는 것입니다. 모든 모델은 /src/models 폴더에 정의되어야합니다.
다음은 /queries/posts.surql query의 응답에서 모델 정의의 예입니다.
use serde :: { Deserialize , Serialize } ;
# [ derive ( Debug , Clone , PartialEq , Serialize , Deserialize ) ]
pub struct PostsQueryItem {
pub id : String ,
pub title : String ,
pub content : String ,
pub status : String ,
pub number_of_comments : u16 ,
}
pub type PostsQuery = Vec < PostsQueryItem > ; /mutations/comment.surql query의 응답에서 얻은 또 다른 예 :
use serde :: { Deserialize , Serialize } ;
# [ derive ( Debug , Clone , PartialEq , Serialize , Deserialize ) ]
pub struct CommentMutationItem {
pub id : String ,
pub content : String ,
}
pub type CommentMutation = Vec < CommentMutationItem > ;내부 변수와 입력 변수를 구별하기 위해 쿼리 및 돌연변이 변수를 성공적으로 추출하기 위해 따라야 할 패턴을 설정했습니다.
다음 돌연변이 ...
// $user_id: String
// $post_id: Option < String >
// $comment_id: Option < String >
// $content: String
LET $user = ( SELECT * FROM type::thing( " user " , $user_id));
LET $post_or_comment = ( SELECT * FROM type::thing( " post " , $post_id), type::thing( " comment " , $comment_id));
RELATE $user - > comment - > $post_or_comment
SET content = $content;...이 기능을 생성합니다.
pub async fn mutate_comment < C : Connection > (
db : & ' _ Surreal < C > ,
user_id : String ,
post_id : Option < String > ,
comment_id : Option < String > ,
content : String
) -> Result < CommentMutation > {
const QUERY : & str = include_str ! ( "../../../mutations/comment.surql" ) ;
let result : CommentMutation = db
. query ( QUERY )
. bind ( ( "user_id" , user_id ) )
. bind ( ( "post_id" , post_id ) )
. bind ( ( "comment_id" , comment_id ) )
. bind ( ( "content" , content ) )
. await ?
. take ( 0 ) ? ;
Ok ( result )
}보시다시피, 의견은 규칙을 따라야합니다.
$ prefix를 잊지 마십시오):신속하게 시작할 수 있도록 사용할 수있는 사전 정의 된 템플릿 목록이 있습니다.
| 주형 | 설명 |
|---|---|
| 비어 있는 | 당신이 만들 수있는 가장 작은 Ultime 프로젝트. 적용된 마이그레이션을 저장하기 위해 이미 정의 된 script_migration 테이블이있는 깨끗한 스키마.카운터 예제가있는 기본 렙토스 앱. |
| 블로그 | 블로그 앱 : 새 블로그 게시물을 만들고 게시물 및 댓글을 게시/게시하지 않습니다. |
다음 명령 줄을 사용하여 새로운 ULTIME 프로젝트를 만들 수 있습니다.
ultime new <PROJECT_NAME> --template <TEMPLATE>