Skip to content

Commit

Permalink
added streaming user updates demo
Browse files Browse the repository at this point in the history
  • Loading branch information
martypitt committed Oct 19, 2023
1 parent 3bcf553 commit 5820f66
Show file tree
Hide file tree
Showing 57 changed files with 15,321 additions and 0 deletions.
84 changes: 84 additions & 0 deletions streaming-user-updates/demo-queries.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
## Background
* New social media offering - competing with twitter
* 2 Kafka topics
* Tweets
* Analytics
* Microservice - User information

Goal: Build a data feed for displaying our timeline on the UI


## Querying a stream

```
stream { UserStatusUpdateMessage }
```

## Enriching a stream against a microservice

```
import com.icycube.users.Username
stream { UserStatusUpdateMessage } as {
id: MessageId
message: UserStatus
username: Username
name : FirstName + " " + LastName
picture: MediumPictureURL
}[]
```

## Caching HTTP Requests

Add:

```
@Cache(connection = "localHzc")
```

## Merging streams

* We have multiple streams that we need to join

## Streaming Analytics
```
stream { MessageAnalytics }
stream { UserStatusUpdateMessage | MessageAnalytics }
import com.icycube.users.Username
stream { UserStatusUpdateMessage | MessageAnalytics } as {
id: MessageId
message: UserStatus
views: ViewCount
username: Username
name : FirstName + " " + LastName
picture: MediumPictureURL
}[]
```

## State

*

```taxi
import com.icycube.users.Username
@Cache(connection = "localHzc")
@StateStore(connection = "localHzc")
stream { UserStatusUpdateMessage | MessageAnalytics } as {
id: MessageId
message: UserStatus
views: ViewCount
username: Username
name : FirstName + " " + LastName
picture: MediumPictureURL
}[]
```

## Why is this valuable?

* Stitching streams together fast
*
25 changes: 25 additions & 0 deletions streaming-user-updates/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.orbitalhq.demos</groupId>
<artifactId>orbital-demos</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>

<artifactId>streaming-user-updates</artifactId>

<packaging>pom</packaging>
<modules>
<module>user-updates-service</module>
</modules>

<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

</project>
1 change: 1 addition & 0 deletions streaming-user-updates/taxi/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.taxi/
5 changes: 5 additions & 0 deletions streaming-user-updates/taxi/.vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"recommendations": [
"taxi-lang.taxi-language-server"
]
}
65 changes: 65 additions & 0 deletions streaming-user-updates/taxi/dist/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.icycube</groupId>
<artifactId>taxonomy</artifactId>
<version>0.1.0</version>
<properties>
<maven.compiler.target>17</maven.compiler.target>
<kotlin.version>1.8.10</kotlin.version>
<maven.compiler.source>17</maven.compiler.source>
<taxi.version>1.42.0</taxi.version>
</properties>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.taxilang</groupId>
<artifactId>taxi-annotations</artifactId>
<version>${taxi.version}</version>
</dependency>
</dependencies>
<repositories>
<repository>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>taxi-snapshots</id>
<name>taxi-snapshots</name>
<url>https://repo.orbitalhq.com/snapshot</url>
</repository>
<repository>
<releases>
<enabled>true</enabled>
</releases>
<id>taxi-releases</id>
<name>taxi-releases</name>
<url>https://repo.orbitalhq.com/release</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package com.icycube

import kotlin.String

object TypeNames {
object com {
object orbitalhq {
object films {
object announcements {
const val UserStatusUpdateMessage: String =
"com.orbitalhq.films.announcements.UserStatusUpdateMessage"

const val UserStatus: String = "com.orbitalhq.films.announcements.UserStatus"
}
}
}

object icycube {
object users {
const val Gender: String = "com.icycube.users.Gender"

const val Title: String = "com.icycube.users.Title"

const val FirstName: String = "com.icycube.users.FirstName"

const val LastName: String = "com.icycube.users.LastName"

const val City: String = "com.icycube.users.City"

const val State: String = "com.icycube.users.State"

const val Country: String = "com.icycube.users.Country"

const val Postcode: String = "com.icycube.users.Postcode"

const val Latitude: String = "com.icycube.users.Latitude"

const val Longitude: String = "com.icycube.users.Longitude"

const val Offset: String = "com.icycube.users.Offset"

const val TimezoneDescription: String = "com.icycube.users.TimezoneDescription"

const val UUID: String = "com.icycube.users.UUID"

const val Username: String = "com.icycube.users.Username"

const val Password: String = "com.icycube.users.Password"

const val Salt: String = "com.icycube.users.Salt"

const val MD5: String = "com.icycube.users.MD5"

const val SHA1: String = "com.icycube.users.SHA1"

const val SHA256: String = "com.icycube.users.SHA256"

const val DateString: String = "com.icycube.users.DateString"

const val Age: String = "com.icycube.users.Age"

const val PhoneNumber: String = "com.icycube.users.PhoneNumber"

const val CellNumber: String = "com.icycube.users.CellNumber"

const val IDName: String = "com.icycube.users.IDName"

const val IDValue: String = "com.icycube.users.IDValue"

const val LargePictureURL: String = "com.icycube.users.LargePictureURL"

const val MediumPictureURL: String = "com.icycube.users.MediumPictureURL"

const val ThumbnailPictureURL: String = "com.icycube.users.ThumbnailPictureURL"

const val Seed: String = "com.icycube.users.Seed"

const val Results: String = "com.icycube.users.Results"

const val Page: String = "com.icycube.users.Page"

const val Version: String = "com.icycube.users.Version"

const val StreetNumber: String = "com.icycube.users.StreetNumber"

const val StreetName: String = "com.icycube.users.StreetName"
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.icycube.users

import com.icycube.TypeNames.com.icycube.users.Age
import kotlin.Int
import lang.taxi.annotations.DataType

@DataType(
value = Age,
imported = true
)
typealias Age = Int
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.icycube.users

import com.icycube.TypeNames.com.icycube.users.CellNumber
import kotlin.String
import lang.taxi.annotations.DataType

@DataType(
value = CellNumber,
imported = true
)
typealias CellNumber = String
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.icycube.users

import com.icycube.TypeNames.com.icycube.users.City
import kotlin.String
import lang.taxi.annotations.DataType

@DataType(
value = City,
imported = true
)
typealias City = String
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.icycube.users

import com.icycube.TypeNames.com.icycube.users.Country
import kotlin.String
import lang.taxi.annotations.DataType

@DataType(
value = Country,
imported = true
)
typealias Country = String
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.icycube.users

import com.icycube.TypeNames.com.icycube.users.DateString
import kotlin.String
import lang.taxi.annotations.DataType

@DataType(
value = DateString,
imported = true
)
typealias DateString = String
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.icycube.users

import com.icycube.TypeNames.com.icycube.users.FirstName
import kotlin.String
import lang.taxi.annotations.DataType

@DataType(
value = FirstName,
imported = true
)
typealias FirstName = String
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.icycube.users

import com.icycube.TypeNames.com.icycube.users.Gender
import kotlin.String
import lang.taxi.annotations.DataType

@DataType(
value = Gender,
imported = true
)
typealias Gender = String
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.icycube.users

import com.icycube.TypeNames.com.icycube.users.IDName
import kotlin.String
import lang.taxi.annotations.DataType

@DataType(
value = IDName,
imported = true
)
typealias IDName = String
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.icycube.users

import com.icycube.TypeNames.com.icycube.users.IDValue
import kotlin.String
import lang.taxi.annotations.DataType

@DataType(
value = IDValue,
imported = true
)
typealias IDValue = String
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.icycube.users

import com.icycube.TypeNames.com.icycube.users.LargePictureURL
import kotlin.String
import lang.taxi.annotations.DataType

@DataType(
value = LargePictureURL,
imported = true
)
typealias LargePictureURL = String
Loading

0 comments on commit 5820f66

Please sign in to comment.