Skip to content

Instantly share code, notes, and snippets.

View jayhuang75's full-sized avatar

jayhuang75 jayhuang75

View GitHub Profile
@jayhuang75
jayhuang75 / go-train-delay-listener.go
Created October 27, 2021 02:41
go-train-delay-listener.go
type Lister struct {
pubsub *pubsub.Client
ctx context.Context
}
func NewPubSub(projectID string) (*Lister, error) {
ctx := context.Background()
client, err := pubsub.NewClient(ctx, projectID)
if err != nil {
@jayhuang75
jayhuang75 / go-train-delay-listen.go
Created October 27, 2021 02:51
go-train-delay-listen.go
func (l *Lister) ListenSubscription(cm chan<- *pubsub.Message, subID string) error {
defer l.pubsub.Close()
sub := l.pubsub.Subscription(subID)
// Receive blocks until the context is cancelled or an error occurs.
err := sub.Receive(l.ctx, func(ctx context.Context, msg *pubsub.Message) {
log.Debugf("[ListenSubscription] Receive message from pubsub:%q\n", string(msg.Data))
cm <- msg
@jayhuang75
jayhuang75 / go-train-delay-changes.go
Created October 27, 2021 02:53
go-train-delay-changes.go
// Create a channel to handle messages to as they come in.
cm := make(chan *pubsub.Message)
defer close(cm)
// Handle individual messages in a goroutine.
go func(cm <-chan *pubsub.Message) {
for msg := range cm {
log.Debugf("[main] Got message :%q\n", string(msg.Data))
data, err := newProcessor.Run(1)
if err != nil {
@jayhuang75
jayhuang75 / go_train_delay_rust_api_srv_init.rs
Last active November 7, 2021 16:42
go train delay rust api srv init
#[allow(dead_code)]
pub struct Application {
port: u16,
server: Server,
}
impl Application {
pub async fn new() -> Result<Self, AppError> {
dotenv().ok();
@jayhuang75
jayhuang75 / go_train_delay_rust_api_appstate_init.rs
Last active November 7, 2021 16:46
go train delay rust api appstate init
impl AppState {
pub async fn new() -> Result<Self, AppError> {
let database = Database::new().await?;
Ok(AppState {
db: database.pool,
})
}
pub async fn get_srv(self) -> Result<Server, AppError> {
let mut listenfd = ListenFd::from_env();
@jayhuang75
jayhuang75 / go_train_delay_rust_api_routes.rs
Created November 7, 2021 16:38
go train delay rust api routes
pub fn routes_conf(config: &mut web::ServiceConfig) {
// health check
config.service(check);
config.service(get_delays);
config.service(search_by_date);
}
@jayhuang75
jayhuang75 / go_train_delay_rust_api_sqlx_get_all.rs
Created November 7, 2021 17:08
go train delay rust api sqlx get all
let q = format!(
"select
date,
departure,
depart_scheduled,
destination,
arrival_scheduled,
delay,
created_at,
count(*) OVER() AS total_count
@jayhuang75
jayhuang75 / go _rain_delay_serch_by_date_ranges.json
Created November 7, 2021 18:35
go train delay serch by date ranges post body
{
"query": {
"must": {
"ranges": [
{"date": {"gte": "2021-10-01", "lte": "2021-11-01"}}
]
}
}
}
@jayhuang75
jayhuang75 / go_train_delay_rust_api_json_validator.rs
Created November 8, 2021 00:02
go train delay rust api json body validation
pub fn new(q: &str) -> Result<Self, AppError> {
// get the input search string
let raw_query: SearchRawQuery = serde_json::from_str(q)?;
let mut query_keys_validation_list: Vec<&Option<Vec<Value>>> = vec![];
// check if have must keyword
if let Some(must) = &raw_query.query.must {
query_keys_validation_list.extend_from_slice(&[
&must.ranges,
]);
@jayhuang75
jayhuang75 / go_train_delay_rust_api_raw_json_to_sql.rs
Created November 8, 2021 00:08
go train delay rust api raw json to sql
pub async fn to_sql_query(&self, namespace: &str) -> Result<SearchSQLQuery, AppError> {
let mut sql_query: String;
match namespace {
SEARCH_NAMESPACE_DATE_RANGE => {
sql_query = "select date, departure, depart_scheduled, destination, arrival_scheduled, delay, created_at, count(*) OVER() AS total_count from delays".to_string();
}
_ => {
return Err(AppError {
message: None,