├── server
├── deploy
│ ├── .dockerignore
│ ├── fly.toml
│ ├── Dockerfile.raspberry
│ └── Dockerfile
├── generate.go
├── pkg
│ ├── handlers
│ │ ├── gh
│ │ │ └── gh.go
│ │ ├── prutils
│ │ │ ├── prutils_test.go
│ │ │ └── prutils.go
│ │ └── handlers.go
│ ├── pr12er
│ │ ├── database.proto
│ │ ├── service.proto
│ │ └── messages.proto
│ ├── env
│ │ └── env.go
│ └── serv
│ │ ├── serv.go
│ │ └── serv_test.go
├── cmd
│ ├── server
│ │ └── main.go
│ ├── tools
│ │ └── tools.go
│ └── client
│ │ └── main.go
├── .gitignore
├── internal
│ ├── err
│ │ └── err.go
│ ├── data
│ │ ├── data.go
│ │ └── data_test.go
│ ├── wire.go
│ ├── wire_gen.go
│ ├── ghv3
│ │ ├── ghv3.go
│ │ └── ghv3_test.go
│ ├── mock_gh
│ │ └── mock_gh.go
│ └── application.go
├── middlewares
│ ├── healthserver
│ │ └── healthserver.go
│ └── metrics
│ │ ├── metrics_test.go
│ │ └── metrics.go
└── go.mod
├── client
├── ios
│ ├── Runner
│ │ ├── Runner-Bridging-Header.h
│ │ ├── Assets.xcassets
│ │ │ ├── LaunchImage.imageset
│ │ │ │ ├── LaunchImage.png
│ │ │ │ ├── LaunchImage@2x.png
│ │ │ │ ├── LaunchImage@3x.png
│ │ │ │ ├── README.md
│ │ │ │ └── Contents.json
│ │ │ └── AppIcon.appiconset
│ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ │ ├── Icon-App-83.5x83.5@2x.png
│ │ │ │ └── Contents.json
│ │ ├── AppDelegate.swift
│ │ ├── Base.lproj
│ │ │ ├── Main.storyboard
│ │ │ └── LaunchScreen.storyboard
│ │ └── Info.plist
│ ├── Flutter
│ │ ├── Debug.xcconfig
│ │ ├── Release.xcconfig
│ │ └── AppFrameworkInfo.plist
│ ├── Runner.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── WorkspaceSettings.xcsettings
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── WorkspaceSettings.xcsettings
│ │ │ └── IDEWorkspaceChecks.plist
│ ├── .gitignore
│ ├── Podfile
│ └── Podfile.lock
├── web
│ ├── favicon.png
│ ├── icons
│ │ ├── icon-128.png
│ │ ├── icon-256.png
│ │ └── icon-512.png
│ ├── manifest.json
│ └── index.html
├── images
│ ├── tf-logo.png
│ └── pytorch-logo.png
├── android
│ ├── gradle.properties
│ ├── app
│ │ ├── src
│ │ │ ├── main
│ │ │ │ ├── res
│ │ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ ├── drawable
│ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ ├── drawable-v21
│ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ ├── values
│ │ │ │ │ │ └── styles.xml
│ │ │ │ │ └── values-night
│ │ │ │ │ │ └── styles.xml
│ │ │ │ ├── kotlin
│ │ │ │ │ └── com
│ │ │ │ │ │ └── github
│ │ │ │ │ │ └── codingpot
│ │ │ │ │ │ └── pr12er
│ │ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── AndroidManifest.xml
│ │ │ ├── debug
│ │ │ │ └── AndroidManifest.xml
│ │ │ └── profile
│ │ │ │ └── AndroidManifest.xml
│ │ └── build.gradle
│ ├── gradle
│ │ └── wrapper
│ │ │ └── gradle-wrapper.properties
│ ├── .gitignore
│ ├── settings.gradle
│ └── build.gradle
├── lib
│ ├── widgets
│ │ ├── detail
│ │ │ ├── youtube.dart
│ │ │ ├── youtube_interface.dart
│ │ │ ├── abstract.dart
│ │ │ ├── youtube_native.dart
│ │ │ ├── youtube_web.dart
│ │ │ ├── recommendation.dart
│ │ │ ├── header.dart
│ │ │ └── repository.dart
│ │ ├── main
│ │ │ ├── main_screen_list_view.dart
│ │ │ ├── main_screen_favorite_view.dart
│ │ │ └── video_search_delegate.dart
│ │ └── components
│ │ │ ├── custom_bottom_navigation_bar.dart
│ │ │ ├── open_url_on_tap.dart
│ │ │ ├── expandable_text.dart
│ │ │ └── custom_app_bar.dart
│ ├── grpc_channel_native.dart
│ ├── grpc_channel_web.dart
│ ├── protos
│ │ ├── pkg
│ │ │ └── pr12er
│ │ │ │ ├── database.pbenum.dart
│ │ │ │ ├── service.pbenum.dart
│ │ │ │ └── messages.pbenum.dart
│ │ └── google
│ │ │ └── protobuf
│ │ │ ├── timestamp.pbenum.dart
│ │ │ ├── timestamp.pbjson.dart
│ │ │ └── timestamp.pb.dart
│ ├── utils
│ │ ├── share_service.dart
│ │ └── extractor.dart
│ ├── sort_preference.dart
│ ├── main.dart
│ ├── service.dart
│ ├── view_models
│ │ └── view_model_videos.dart
│ ├── custom_theme.dart
│ └── screens
│ │ ├── main_screen.dart
│ │ └── detail_screen.dart
├── test_driver
│ ├── app.dart
│ └── app_test.dart
├── .metadata
├── README.md
├── analysis_options.yaml
├── test
│ ├── custom_theme_test.dart
│ └── utils
│ │ ├── extractor_test.dart
│ │ └── share_service_test.dart
├── .gitignore
└── pubspec.yaml
├── .gitignore
├── dbctl
├── main.go
├── README.md
├── cmd
│ ├── root.go
│ ├── youtube.go
│ └── genmapping.go
├── internal
│ ├── io
│ │ ├── io.go
│ │ └── io_test.go
│ ├── config
│ │ └── config.go
│ └── fetcher
│ │ └── fetcher_test.go
└── go.mod
├── tools
├── envsubst_okteto_k8s_files.bash
└── Dockerfile
├── hooks
├── uninstall.sh
├── install.sh
└── pre-commit
├── .releaserc
├── buf.yaml
├── buf.gen.yaml
├── codecov.yml
├── okteto-pipeline.yaml
├── .github
└── workflows
│ ├── protoc.yml
│ ├── generate-db.yaml
│ ├── discord-notification.yaml
│ ├── tools-docker-release.yaml
│ └── ci.yml
├── k8s
├── kkweon-okteto
│ ├── ingress.yaml
│ ├── server.yaml
│ ├── envoy-deployment.yaml
│ ├── grafana-agent.yaml
│ └── envoy-config.yaml
└── kkweon-raspberry
│ ├── ingress.yaml
│ └── server.yaml
├── skaffold.yaml
├── .golangci.yaml
├── LICENSE
├── README.md
├── pr12er_diagram.drawio
└── Makefile
/server/deploy/.dockerignore:
--------------------------------------------------------------------------------
1 | client/*
--------------------------------------------------------------------------------
/client/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/client/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/web/favicon.png
--------------------------------------------------------------------------------
/client/images/tf-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/images/tf-logo.png
--------------------------------------------------------------------------------
/client/images/pytorch-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/images/pytorch-logo.png
--------------------------------------------------------------------------------
/client/web/icons/icon-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/web/icons/icon-128.png
--------------------------------------------------------------------------------
/client/web/icons/icon-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/web/icons/icon-256.png
--------------------------------------------------------------------------------
/client/web/icons/icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/web/icons/icon-512.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | .DS_Store
3 | .vscode/
4 | /client/test/**/*.mocks.dart
5 | .devcontainer/
6 | /.env
7 | *.pbtxt.bak
8 |
--------------------------------------------------------------------------------
/client/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/dbctl/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/codingpot/pr12er/dbctl/cmd"
4 |
5 | func main() {
6 | cmd.Execute()
7 | }
8 |
--------------------------------------------------------------------------------
/client/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/server/generate.go:
--------------------------------------------------------------------------------
1 | //go:generate mockgen -source pkg/handlers/gh/gh.go -destination internal/mock_gh/mock_gh.go GitHubService
2 | package main
3 |
--------------------------------------------------------------------------------
/client/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/tools/envsubst_okteto_k8s_files.bash:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | for file in k8s/kkweon-okteto/*.yaml
3 | do
4 | envsubst < "$file" | kubectl apply -f -
5 | done
6 |
--------------------------------------------------------------------------------
/hooks/uninstall.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | base_dir="$(dirname -- "${BASH_SOURCE[0]}")"
4 | find "${base_dir}" -type f ! -name '*.sh' -print0 | xargs -I _ rm -f .git/_
5 |
--------------------------------------------------------------------------------
/client/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/client/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/client/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/client/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/client/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/hooks/install.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | base_dir="$(dirname -- "${BASH_SOURCE[0]}")"
4 | find "${base_dir}" -type f ! -name '*.sh' -exec install -C -m 755 {} .git/hooks/ \;
5 |
--------------------------------------------------------------------------------
/client/lib/widgets/detail/youtube.dart:
--------------------------------------------------------------------------------
1 | export "youtube_interface.dart"
2 | if (dart.library.html) "./youtube_web.dart"
3 | if (dart.library.io) "./youtube_native.dart";
4 |
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/client/lib/grpc_channel_native.dart:
--------------------------------------------------------------------------------
1 | import 'package:grpc/grpc.dart';
2 |
3 | ClientChannel getKkweonOktetoChannel() {
4 | return ClientChannel('ingress-kkweon.cloud.okteto.net');
5 | }
6 |
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codingpot/pr12er/HEAD/client/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/client/test_driver/app.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_driver/driver_extension.dart';
2 | import 'package:pr12er/main.dart' as app;
3 |
4 | void main() {
5 | enableFlutterDriverExtension();
6 |
7 | app.main();
8 | }
9 |
--------------------------------------------------------------------------------
/.releaserc:
--------------------------------------------------------------------------------
1 | {
2 | "branches": [
3 | "main"
4 | ],
5 | "plugins": [
6 | "@semantic-release/commit-analyzer",
7 | "@semantic-release/release-notes-generator",
8 | "@semantic-release/github",
9 | ]
10 | }
--------------------------------------------------------------------------------
/server/pkg/handlers/gh/gh.go:
--------------------------------------------------------------------------------
1 | package gh
2 |
3 | type GitHubIssue struct {
4 | URL string
5 | }
6 |
7 | type GitHubService interface {
8 | CreateIssue(title, body string, labels []string) (*GitHubIssue, error)
9 | }
10 |
--------------------------------------------------------------------------------
/client/android/app/src/main/kotlin/com/github/codingpot/pr12er/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.github.codingpot.pr12er
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/client/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/client/lib/grpc_channel_web.dart:
--------------------------------------------------------------------------------
1 | import 'package:grpc/grpc_web.dart';
2 |
3 | GrpcWebClientChannel getKkweonOktetoChannel() {
4 | return GrpcWebClientChannel.xhr(
5 | Uri.parse("https://envoy-kkweon.cloud.okteto.net/"));
6 | }
7 |
--------------------------------------------------------------------------------
/buf.yaml:
--------------------------------------------------------------------------------
1 | version: v1beta1
2 | build:
3 | roots:
4 | - ./server
5 | lint:
6 | allow_comment_ignores: true
7 | use:
8 | - DEFAULT
9 | except:
10 | - PACKAGE_VERSION_SUFFIX
11 | breaking:
12 | use:
13 | - FILE
14 |
--------------------------------------------------------------------------------
/buf.gen.yaml:
--------------------------------------------------------------------------------
1 | version: v1beta1
2 | plugins:
3 | - name: go
4 | out: server
5 | opt:
6 | - paths=source_relative
7 | - name: go-grpc
8 | out: server
9 | opt:
10 | - paths=source_relative
11 | - name: dart
12 | out: client/lib/protos
13 | opt: grpc
14 |
--------------------------------------------------------------------------------
/client/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
7 |
--------------------------------------------------------------------------------
/codecov.yml:
--------------------------------------------------------------------------------
1 | coverage:
2 | status:
3 | changes:
4 | default:
5 | informational: true
6 | patch:
7 | default:
8 | informational: true
9 | project:
10 | default:
11 | informational: true
12 |
13 | ignore:
14 | - "**/*.pb.go"
15 | - "**/*.pb*.dart"
16 |
--------------------------------------------------------------------------------
/server/cmd/server/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/codingpot/pr12er/server/internal"
5 | log "github.com/sirupsen/logrus"
6 | )
7 |
8 | func main() {
9 | if err := internal.CreateApplication().Run(); err != nil {
10 | log.WithError(err).Panic("application failed to run")
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/client/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/client/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/client/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/client/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 |
--------------------------------------------------------------------------------
/client/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/client/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/server/.gitignore:
--------------------------------------------------------------------------------
1 | # Binaries for programs and plugins
2 | *.exe
3 | *.exe~
4 | *.dll
5 | *.so
6 | *.dylib
7 |
8 | # Test binary, built with `go test -c`
9 | *.test
10 |
11 | # Output of the go coverage tool, specifically when used with LiteIDE
12 | *.out
13 |
14 | # Dependency directories (remove the comment below to include it)
15 | # vendor/
--------------------------------------------------------------------------------
/server/internal/err/err.go:
--------------------------------------------------------------------------------
1 | package err
2 |
3 | import "fmt"
4 |
5 | // PrIDNotFoundError is used when PR ID is not found in Database.
6 | type PrIDNotFoundError struct {
7 | PrID int32
8 | }
9 |
10 | // Error implements Error interface.
11 | func (e PrIDNotFoundError) Error() string {
12 | return fmt.Sprintf("PR-%d was not found", e.PrID)
13 | }
14 |
--------------------------------------------------------------------------------
/client/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: b22742018b3edf16c6cadd7b76d9db5e7f9064b5
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/server/cmd/tools/tools.go:
--------------------------------------------------------------------------------
1 | //go:build tools
2 | // +build tools
3 |
4 | package tools
5 |
6 | import (
7 | _ "github.com/daixiang0/gci"
8 | _ "github.com/golang/mock/mockgen"
9 | _ "github.com/google/wire/cmd/wire"
10 | _ "google.golang.org/grpc/cmd/protoc-gen-go-grpc"
11 | _ "google.golang.org/protobuf/cmd/protoc-gen-go"
12 | _ "mvdan.cc/gofumpt"
13 | )
14 |
--------------------------------------------------------------------------------
/client/lib/protos/pkg/pr12er/database.pbenum.dart:
--------------------------------------------------------------------------------
1 | ///
2 | // Generated code. Do not modify.
3 | // source: pkg/pr12er/database.proto
4 | //
5 | // @dart = 2.12
6 | // ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
7 |
--------------------------------------------------------------------------------
/client/lib/protos/google/protobuf/timestamp.pbenum.dart:
--------------------------------------------------------------------------------
1 | ///
2 | // Generated code. Do not modify.
3 | // source: google/protobuf/timestamp.proto
4 | //
5 | // @dart = 2.12
6 | // ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
7 |
--------------------------------------------------------------------------------
/client/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/client/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
6 |
--------------------------------------------------------------------------------
/client/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/okteto-pipeline.yaml:
--------------------------------------------------------------------------------
1 | deploy:
2 | - okteto build -t okteto.dev/codingpot-pr12er-server:${OKTETO_GIT_COMMIT} -f ./server/deploy/Dockerfile server
3 | - bash './tools/envsubst_okteto_k8s_files.bash'
4 | - kubectl set image deployment server server=okteto.dev/codingpot-pr12er-server:${OKTETO_GIT_COMMIT}
5 | - kubectl rollout restart deployment grafana-agent
6 | - kubectl rollout status deployment server
7 | - kubectl rollout status deployment grafana-agent
8 | - kubectl rollout status deployment envoy
9 |
--------------------------------------------------------------------------------
/client/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
4 | def properties = new Properties()
5 |
6 | assert localPropertiesFile.exists()
7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
8 |
9 | def flutterSdkPath = properties.getProperty("flutter.sdk")
10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
12 |
--------------------------------------------------------------------------------
/client/lib/utils/share_service.dart:
--------------------------------------------------------------------------------
1 | import 'package:pr12er/protos/pkg/pr12er/messages.pb.dart';
2 |
3 | String generateShareSummary(Video video, Detail? detail) {
4 | final sb = StringBuffer();
5 | sb.write("""
6 | [YouTube 주소]
7 | ${video.link}
8 | """);
9 |
10 | if (detail != null && detail.papers.isNotEmpty) {
11 | final mainPaper = detail.papers.first;
12 | sb.write("""
13 |
14 | [논문]
15 | ${mainPaper.title} (https://arxiv.org/abs/${mainPaper.arxivId})
16 | """);
17 | }
18 |
19 | return sb.toString();
20 | }
21 |
--------------------------------------------------------------------------------
/.github/workflows/protoc.yml:
--------------------------------------------------------------------------------
1 | # Test protoc generate
2 | name: Protoc
3 |
4 | on:
5 | push:
6 | branches: [main]
7 | pull_request:
8 | workflow_dispatch:
9 |
10 | jobs:
11 | build:
12 | runs-on: ubuntu-latest
13 |
14 | steps:
15 | - uses: actions/checkout@v2
16 | - uses: subosito/flutter-action@v1
17 | with:
18 | channel: "stable"
19 | - uses: actions/setup-go@v2.1.3
20 | with:
21 | go-version: 1.18
22 | - run: make install gen.all
23 | - run: buf lint
24 |
--------------------------------------------------------------------------------
/client/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/client/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "idiom": "universal",
5 | "filename": "LaunchImage.png",
6 | "scale": "1x"
7 | },
8 | {
9 | "idiom": "universal",
10 | "filename": "LaunchImage@2x.png",
11 | "scale": "2x"
12 | },
13 | {
14 | "idiom": "universal",
15 | "filename": "LaunchImage@3x.png",
16 | "scale": "3x"
17 | }
18 | ],
19 | "info": {
20 | "version": 1,
21 | "author": "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/client/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/server/middlewares/healthserver/healthserver.go:
--------------------------------------------------------------------------------
1 | package healthserver
2 |
3 | import (
4 | "google.golang.org/grpc"
5 | "google.golang.org/grpc/health"
6 | "google.golang.org/grpc/health/grpc_health_v1"
7 | )
8 |
9 | // RegisterHealthServer registers gRPC Health Server.
10 | func RegisterHealthServer(grpcServer *grpc.Server) {
11 | healthServer := health.NewServer()
12 | healthServer.SetServingStatus("grpc.health.v1.Health", grpc_health_v1.HealthCheckResponse_SERVING)
13 | grpc_health_v1.RegisterHealthServer(grpcServer, healthServer)
14 | }
15 |
--------------------------------------------------------------------------------
/client/lib/widgets/detail/youtube_interface.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/widgets.dart';
2 |
3 | class YoutubeWidget extends StatefulWidget {
4 | final String youtubeId;
5 |
6 | const YoutubeWidget({Key? key, required this.youtubeId}) : super(key: key);
7 |
8 | @override
9 | _YouTubeWidgetState createState() => _YouTubeWidgetState();
10 | }
11 |
12 | class _YouTubeWidgetState extends State {
13 | @override
14 | Widget build(BuildContext context) {
15 | throw UnimplementedError("you have to import youtube.dart instead");
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/client/lib/widgets/main/main_screen_list_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:pr12er/widgets/main/pr12video.dart';
3 | import "../../protos/pkg/pr12er/messages.pb.dart";
4 |
5 | class MainScreenListView extends StatelessWidget {
6 | const MainScreenListView({
7 | Key? key,
8 | required this.cleanList,
9 | }) : super(key: key);
10 |
11 | final List