8 Mart 2025 Cumartesi

Kotlinde YouTube benzeri Video Paylaşma Programı Örneği

 Kotlin ile YouTube benzeri bir video paylaşma uygulaması geliştirmek için, temel olarak kullanıcıların video yüklemesi, videoları izlemesi ve etkileşimde bulunması gibi özellikleri içeren bir sistem tasarlamanız gerekecektir. Bu tür bir uygulama genellikle bir sunucu tarafı (backend) ve bir istemci tarafı (frontend) içerir. Sunucu tarafı için Kotlin ile Spring Boot gibi bir framework kullanabilirsiniz, istemci tarafı için ise Android uygulaması geliştirebilirsiniz.

Aşağıda, Kotlin ve Spring Boot kullanarak basit bir video paylaşım uygulamasının temel yapısını gösteren bir örnek bulabilirsiniz. Bu örnek, temel CRUD (Create, Read, Update, Delete) işlemlerini ve video yükleme işlevselliğini içerir.

1. Proje Yapısı

Projenizin temel yapısı şu şekilde olabilir:

Copy
src
├── main
│   ├── kotlin
│   │   └── com
│   │       └── example
│   │           └── videoplatform
│   │               ├── controller
│   │               │   └── VideoController.kt
│   │               ├── model
│   │               │   └── Video.kt
│   │               ├── repository
│   │               │   └── VideoRepository.kt
│   │               ├── service
│   │               │   └── VideoService.kt
│   │               └── VideoPlatformApplication.kt
│   └── resources
│       └── application.properties
└── test
    └── kotlin
        └── com
            └── example
                └── videoplatform
                    └── VideoPlatformApplicationTests.kt

2. Video Modeli

Video.kt dosyasında, video bilgilerini tutacak bir data class tanımlayabilirsiniz.

kotlin
Copy
package com.example.videoplatform.model

import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id

@Entity
data class Video(
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long = 0,
    val title: String,
    val description: String,
    val url: String
)

3. Video Repository

VideoRepository.kt dosyasında, veritabanı işlemlerini gerçekleştirecek bir repository interface'i tanımlayabilirsiniz.

kotlin
Copy
package com.example.videoplatform.repository

import com.example.videoplatform.model.Video
import org.springframework.data.jpa.repository.JpaRepository

interface VideoRepository : JpaRepository<Video, Long>

4. Video Service

VideoService.kt dosyasında, iş mantığını (business logic) içeren bir service sınıfı oluşturabilirsiniz.

kotlin
Copy
package com.example.videoplatform.service

import com.example.videoplatform.model.Video
import com.example.videoplatform.repository.VideoRepository
import org.springframework.stereotype.Service

@Service
class VideoService(private val videoRepository: VideoRepository) {

    fun getAllVideos(): List<Video> = videoRepository.findAll()

    fun getVideoById(id: Long): Video? = videoRepository.findById(id).orElse(null)

    fun uploadVideo(video: Video): Video = videoRepository.save(video)

    fun updateVideo(id: Long, video: Video): Video? {
        return if (videoRepository.existsById(id)) {
            videoRepository.save(video.copy(id = id))
        } else {
            null
        }
    }

    fun deleteVideo(id: Long) = videoRepository.deleteById(id)
}

5. Video Controller

VideoController.kt dosyasında, HTTP isteklerini işleyecek bir controller sınıfı oluşturabilirsiniz.

kotlin
Copy
package com.example.videoplatform.controller

import com.example.videoplatform.model.Video
import com.example.videoplatform.service.VideoService
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*

@RestController
@RequestMapping("/videos")
class VideoController(private val videoService: VideoService) {

    @GetMapping
    fun getAllVideos(): List<Video> = videoService.getAllVideos()

    @GetMapping("/{id}")
    fun getVideoById(@PathVariable id: Long): ResponseEntity<Video> {
        val video = videoService.getVideoById(id)
        return if (video != null) ResponseEntity(video, HttpStatus.OK) else ResponseEntity(HttpStatus.NOT_FOUND)
    }

    @PostMapping
    fun uploadVideo(@RequestBody video: Video): Video = videoService.uploadVideo(video)

    @PutMapping("/{id}")
    fun updateVideo(@PathVariable id: Long, @RequestBody video: Video): ResponseEntity<Video> {
        val updatedVideo = videoService.updateVideo(id, video)
        return if (updatedVideo != null) ResponseEntity(updatedVideo, HttpStatus.OK) else ResponseEntity(HttpStatus.NOT_FOUND)
    }

    @DeleteMapping("/{id}")
    fun deleteVideo(@PathVariable id: Long): ResponseEntity<Void> {
        videoService.deleteVideo(id)
        return ResponseEntity(HttpStatus.NO_CONTENT)
    }
}

6. Uygulama Başlatma

VideoPlatformApplication.kt dosyasında, Spring Boot uygulamasını başlatacak ana sınıfı tanımlayabilirsiniz.

kotlin
Copy
package com.example.videoplatform

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class VideoPlatformApplication

fun main(args: Array<String>) {
    runApplication<VideoPlatformApplication>(*args)
}

7. Veritabanı ve Dosya Yükleme

Videoların URL'lerini saklamak için bir veritabanı kullanabilirsiniz. Videoların kendilerini ise bir dosya depolama servisi (örneğin AWS S3, Google Cloud Storage) kullanarak yükleyebilir ve URL'lerini veritabanında saklayabilirsiniz.

8. İstemci Tarafı (Android Uygulaması)

İstemci tarafı için bir Android uygulaması geliştirebilirsiniz. Bu uygulama, yukarıda geliştirdiğiniz Spring Boot API'si ile iletişim kurarak videoları listeleyebilir, izleyebilir ve yükleyebilir.

9. Güvenlik ve Diğer Özellikler

  • Kimlik Doğrulama ve Yetkilendirme: Spring Security kullanarak kullanıcı girişi ve yetkilendirme mekanizmaları ekleyebilirsiniz.

  • Video İşleme: Videoları işlemek için FFmpeg gibi araçlar kullanabilirsiniz.

  • Ölçeklenebilirlik: Uygulamanızı ölçeklendirmek için mikroservis mimarisi ve bulut tabanlı çözümler kullanabilirsiniz.

Bu örnek, temel bir video paylaşım uygulamasının nasıl oluşturulabileceğini göstermektedir. Gerçek bir uygulama geliştirirken, daha fazla özellik ve güvenlik önlemi eklemeniz gerekecektir.

Hiç yorum yok:

Yorum Gönder